我要求搜索名称上带有日期戳的文件并压缩它们。 拉链部分工作正常。但是,我需要忽略具有当前日期戳的文件作为其名称的一部分。文件名模式如下:
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的代码也正常工作。
答案 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
)
是另一种有效的流行形式。
%%c
将ECHO
编入FINDSTR
currentdate
>nul
FINDSTR
ERRORLEVEL
findstr
。 :: comment
会抑制block
的任何输出(因为我们对它不感兴趣)
{{1}}的值由{{1}}设置 - 0表示未找到,否则为0。因此,如果ERRORLEVEL为1(或大于1),则执行ZIP操作。如果 IS 为零,则找到该字符串并绕过ZIP操作。
另请注意表格
{{1}}
在{{1}}命令之外(通常在括号中有一系列命令)很好但不应在块中使用 - 在那里使用REM,否则你可能会得到意想不到的结果。