编写脚本以从文本文件中提取日期字符串,并在Windows中将其替换为7天后的日期

时间:2014-05-07 10:50:13

标签: scripting winrar

我们有一个文本文件告诉winrar在上述日期之后压缩所有文件。 这是文本文件

"c:\Program Files\winrar\Rar.exe" a -r -m0 -ta20140501 zip.rar e:\test\*

我想要一个脚本来提取-ta20140501并将其替换为日期为7天,之后将是20140508

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

这是一个可以使用文本编辑器UltraEdit执行的脚本,用于修改文本文件中的日期字符串。

if (UltraEdit.document.length > 0)  // Is any file opened?
{
   // Define environment for this script.
   UltraEdit.insertMode();
   UltraEdit.columnModeOff();

   // Define the parameters for a case-sensitive (faster) Perl
   // regular expression find in current file from top to bottom.
   UltraEdit.perlReOn();
   UltraEdit.activeDocument.findReplace.mode=0;
   UltraEdit.activeDocument.findReplace.matchCase=true;
   UltraEdit.activeDocument.findReplace.matchWord=false;
   UltraEdit.activeDocument.findReplace.regExp=true;
   UltraEdit.activeDocument.findReplace.searchDown=true;
   if (typeof(UltraEdit.activeDocument.findReplace.searchInColumn) == "boolean")
   {
      UltraEdit.activeDocument.findReplace.searchInColumn=false;
   }
   // Move caret to top of the active file.
   UltraEdit.activeDocument.top();

   // Is a date string in format YYYYMMDD after switch -ta found?
   if(UltraEdit.activeDocument.findReplace.find("(?<=-ta)\\d{8}"))
   {
      // Get this date string from the current text file.
      var sDate = UltraEdit.activeDocument.selection;
      // Get year, month and day of month as integer numbers.
      var nYear = parseInt(sDate.substr(0,4),10);
      var nMonth = parseInt(sDate.substr(4,2),10);
      var nDay = parseInt(sDate.substr(6,2),10);
      // Get number of milliseconds since epoch (1970-01-01 00:00:00 GMT).
      var nMsecEpoch = Date.UTC(nYear,nMonth-1,nDay,0,0,0);
      // Create a new date object with a time 7 days after found date.
      var oNewDate = new Date();
      oNewDate.setTime(7*86400*1000+nMsecEpoch);
      // Get year, month and day of month for this new date
      // and convert it to a date string in format YYYYMMDD.
      var sNewDate = oNewDate.getUTCFullYear().toString(10);
      nMonth = oNewDate.getUTCMonth()+1;
      if (nMonth < 10) sNewDate += "0";
      sNewDate += nMonth.toString(10);
      nDay = oNewDate.getUTCDate();
      if (nDay < 10) sNewDate += "0";
      sNewDate += nDay.toString(10);
      // Write new string to file replacing still selected date string.
      UltraEdit.activeDocument.write(sNewDate);
      // Close the file with saving it.
      UltraEdit.closeFile(UltraEdit.activeDocument.path,1);
   }
}

UltraEdit使用JavaScript核心引擎作为脚本引擎。在此UltraEdit脚本中使用JavaScript Date对象及其方法,以添加在文本文件中找到的7天到期日期字符串。

此脚本代码需要复制到新的ASCII文件中,例如保存到名为%APPDATA%\IDMComp\UltraEdit\Scripts的文件夹UpdateDateString.js

可以在批处理文件中使用以下命令来运行带有要修改的文件的UltraEdit,并使用此脚本修改文本文件中的日期字符串。

@start "Update Date" /wait /min "%ProgramFiles(x86)%\IDMComp\UltraEdit\uedit32.exe" /fni "Path to\Command Text File\WinRAR_Command_File.txt" /s,e="%APPDATA%\IDMComp\UltraEdit\Scripts\UpdateDateString.js"

"Path to\Command Text File\WinRAR_Command_File.txt"是要使用完整路径修改的文本文件的名称。

/fni必须是uedit32.exe的第一个参数,并指定强制使用UltraEdit的新实例来加载文本文件并使用脚本对其进行修改。这是UltraEdit for Windows版本13.10支持的重要参数,如果UE实例已在运行且配置UE中未启用配置设置允许多个实例

/s,e="..."是指示UltraEdit加载双引号中指定的脚本文件,在加载的文件上运行它,并在脚本完成后退出的参数。

由于UltraEdit是一个Windows GUI应用程序,因此必须使用命令start以最小化窗口运行UE并停止批处理文件的执行,直到UltraEdit自行终止。

但老实说,我认为,使用WinRAR命令行开关-tn7d代替-taYYYYMMDD来存档过去7天内修改的所有文件,这样会更有意义,也更容易当前时间。