我们有一个文本文件告诉winrar在上述日期之后压缩所有文件。 这是文本文件
"c:\Program Files\winrar\Rar.exe" a -r -m0 -ta20140501 zip.rar e:\test\*
我想要一个脚本来提取-ta20140501并将其替换为日期为7天,之后将是20140508
有没有办法做到这一点?
答案 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天内修改的所有文件,这样会更有意义,也更容易当前时间。