批处理:忽略处理具有当前日期的文件作为其在当前日期创建的名称或文件的一部分

时间:2013-04-19 06:48:42

标签: windows batch-file

我要求搜索名称上带有日期戳的文件并压缩它们。 拉链部分工作正常。但是,我需要忽略具有当前日期戳的文件作为其名称的一部分。文件名模式如下:

filename_2013-04-18.log
filename_2013-04-19.log

因此,如果2013-04-19是当前日期,则批处理脚本应忽略第二个文件。 我只是一个初学者,所以有人可以帮忙吗?我到达了这里:

for /f "tokens=2-4 delims=/ " %%a in ('date /T') do set year=%%c
for /f "tokens=2-4 delims=/ " %%a in ('date /T') do set month=%%a
for /f "tokens=2-4 delims=/ " %%a in ('date /T') do set day=%%b
set CurrentDate=%year%-%month%-%day%
echo %CurrentDate%
FOR %%c in (%1%filename*.*) DO (
echo %%c
::code to ignore file with CurrentDate
::code to zip older file(s)
)

echo %%c正确打印文件名。并且,zip的代码也正常工作。

1 个答案:

答案 0 :(得分:0)

有点简单:

for /f "tokens=2-4 delims=/ " %%a in ('date /T'
  ) do set year=%%c&set month=%%a&set day=%%b&set CurrentDate=%%c-%%a-%%b
echo %CurrentDate%
FOR %%c in (%1%filename*.*) DO (
 echo %%c
 REM code to ignore file with CurrentDate
 ECHO "%%c"|FINDSTR "%currentdate%" >nul
 IF ERRORLEVEL 1 (
 REM code to zip older file(s)
 )
)

编辑20130419-0932Z:根据建议从FINDSTR结果处理中删除NOT。

请注意,使用该组令​​牌(2到4)将%% a分配给第一个,%% b分配给第二个,%% c分配给第三个。

为了便于阅读,在指示点打破线是安全的

for /f "tokens=2-4 delims=/ " %%a in ('date /T'
  ) do (
 set year=%%c
 set month=%%a
 set day=%%b
 set CurrentDate=%%c-%%a-%%b
 )

是另一种有效的流行形式。

%%cECHO编入FINDSTR currentdate >nul FINDSTR ERRORLEVEL findstr:: comment 会抑制block的任何输出(因为我们对它不感兴趣)

{{1}}的值由{{1}}设置 - 0表示未找到,否则为0。因此,如果ERRORLEVEL为1(或大于1),则执行ZIP操作。如果 IS 为零,则找到该字符串并绕过ZIP操作。

另请注意表格

{{1}}

在{{1}}命令之外(通常在括号中有一系列命令)很好但不应在块中使用 - 在那里使用REM,否则你可能会得到意想不到的结果。