如何将源文件中的文本替换为不同的文件

时间:2015-04-23 18:17:27

标签: file batch-file notepad++

所以我一直在使用 Notepad ++ 做一些小清理工作,现在我离开了最大的任务..

我有一个名为Artists.txt的文件,看起来像

Butta Mohamed
Daler Mehndi
Daljit Mattu
Darshan Khela
Davinder Deep
Davinder Deol
etc...

我有另一个名为Keywords.txt的文件(位于数百个其他文件夹中)。这些文件夹的名称如下所示,它们都包含一个名为Keywords.txt的文本文件

butta-mohamed-lyrics
daler-mehndi-lyrics
daljit-mattu-lyrics
darshan-khela-lyrics
davinder-deep-lyrics
davinder-deol-lyrics

Keywords.txt包含文本_1(Keywords.txt中的几个实例)。

我想要做的是从Artists.txt获取每一行并替换_1。文件夹与Artists.txt的顺序相同。

所以阅读Artists.txt得到第一行Butta Mohamed得到第一个文件夹butta-mohamed-lyrics编辑Keywords.txt找到_1替换(全部)与Butta Mohamed。保存更改。冲洗并重复阅读Artists.txt获取下一行Daler Mehndi获取下一个文件夹daler-mehndi-lyrics编辑Keywords.txt找到_1替换(全部)与Daler Mehndi。保存更改。

想知道这样的事情是否可行?否则,我需要一周的时间通过复制/粘贴或者甚至 Notepad ++ 中的替换功能手动执行此操作

我已经尝试过Notepad ++中的Macro函数但是CTRL-V而不是在剪贴板中粘贴什么,宏似乎用任何记录宏的文本替换了CTRL-V函数。

所以只需添加一些额外的信息......

1 个答案:

答案 0 :(得分:1)

我没有安装Notepad ++,因为我最喜欢的文本编辑器是UltraEdit(共享软件)。

尽管Stack Overflow不是一个免费的代码编写服务,我们希望提问者向我们展示已经为解决任务所做的一些编程工作,但我很容易为这个任务编写一个小的UltraEdit脚本,因此这里是用于此任务的UltraEdit脚本。

脚本顶部的

C:\\Temp\\Test\\必须替换为* lyrics文件夹的父文件夹路径。 UltraEdit脚本使用JavaScript核心引擎执行。因此,UltraEdit脚本中的字符串是JavaScript字符串,其中反斜杠是转义字符。因此,有必要将父文件夹路径中的每个反斜杠转义一个反斜杠。

要在UltraEdit中运行此脚本,请在UltraEdit中打开Artists.txt作为第一个文件。

当第二个文件使用Ctrl + N创建一个新的ASCII文件时,将下面的行复制并粘贴到这个新文件中,编辑脚本代码中的父文件夹路径/名称并保存此脚本,例如名称为KeywordsReplace.js进入任何文件夹。

现在通过在命令运行活动脚本上单击菜单脚本来运行脚本。

您可以看到脚本完成后自动显示输​​出窗口已在Keywords.txt个文件中进行了多少次替换。

if (UltraEdit.document.length > 0)  // Is any file opened?
{
   // Parent folder containing all the *lyrics folders.
   var sParentFolder = "C:\\Temp\\Test\\";

   // Define environment for this script.
   UltraEdit.insertMode();
   UltraEdit.columnModeOff();
   // Select everything in first file.
   UltraEdit.document[0].selectAll();

   // Is first file not an empty file?
   if (UltraEdit.document[0].isSel())
   {
      // Determine line terminator type for first file.
      var sLineTerm = "\r\n";
      if (UltraEdit.document[0].lineTerminator == 1) sLineTerm = "\n"
      else if (UltraEdit.document[0].lineTerminator == 2) sLineTerm = "\r"

      // Get all lines of first file into an array of strings
      var asArtists = UltraEdit.document[0].selection.split(sLineTerm);

      // Remove last string if it is empty because file ended with
      // a line termination.
      if (!asArtists[asArtists.length-1].length) asArtists.pop();

      // Define once the parameters for all the replace in files executed
      // below in the loop with changing directory and replace strings.
      UltraEdit.frInFiles.filesToSearch=0;
      UltraEdit.frInFiles.searchSubs=false;
      UltraEdit.frInFiles.ignoreHiddenSubs=false;
      UltraEdit.frInFiles.openMatchingFiles=false;
      UltraEdit.frInFiles.searchInFilesTypes="Keywords.txt";
      UltraEdit.frInFiles.regExp=false;
      UltraEdit.frInFiles.matchCase=true;
      UltraEdit.frInFiles.matchWord=false;
      UltraEdit.frInFiles.logChanges=true;
      UltraEdit.frInFiles.useEncoding=false;
      UltraEdit.frInFiles.preserveCase=false;

      // Run for each artist a replace of all occurrences of _1
      // in the artists lyrics folder by name of the artist.
      for (nArtist = 0; nArtist < asArtists.length; nArtist++)
      {
         // Build folder name by converting artists name to
         // lower case and replacing all spaces by hyphens.
         var sFolder = asArtists[nArtist].toLowerCase().replace(/ /g,"-");
         // Define directory for replace in files by appending
         // additionally the string "-lyrics" to folder name.
         UltraEdit.frInFiles.directoryStart = sParentFolder + sFolder + "-lyrics\\";
         UltraEdit.frInFiles.replace("_1",asArtists[nArtist]);
      }
      // The output window contains the summary information
      // about the replaces made and therefore open it.
      UltraEdit.outputWindow.showWindow(true);
   }
}

脚本使用提供的数据进行测试,每个Keywords.txt在6 * lyrics文件夹中恰好包含3次_1。输出窗口的结果是:

Running script: C:\Temp\KeywordsReplace.js
============================================================
C:\Temp\Test\butta-mohamed-lyrics\Keywords.txt, 3
3 items replaced in 1 files.
C:\Temp\Test\daler-mehndi-lyrics\Keywords.txt, 3
3 items replaced in 1 files.
C:\Temp\Test\daljit-mattu-lyrics\Keywords.txt, 3
3 items replaced in 1 files.
C:\Temp\Test\darshan-khela-lyrics\Keywords.txt, 3
3 items replaced in 1 files.
C:\Temp\Test\davinder-deep-lyrics\Keywords.txt, 3
3 items replaced in 1 files.
C:\Temp\Test\davinder-deol-lyrics\Keywords.txt, 3
3 items replaced in 1 files.
Script succeeded.

如果您无法接受下载和安装UltraEdit,您必须等待提供批处理文件解决方案或Notepad ++宏解决方案的其他答案,或者您自己编写必要的代码。