0

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

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正在正确打印文件名。而且,压缩代码也可以正常工作。

4

1 回答 1

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
 )

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

%%c您拥有文件名的字符串被ECHO编入FINDSTR其中尝试在currentdate. >nul抑制任何输出(FINDSTR因为我们对它不感兴趣)

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

另请注意,表格

:: comment

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

于 2013-04-19T07:14:30.730 回答