我需要搜索名称上有日期戳的文件并将其压缩。拉链部分工作正常。但是,我需要忽略名称中包含当前日期戳的文件。文件名模式如下:
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正在正确打印文件名。而且,要压缩的代码也工作得很好。
发布于 2013-04-19 15:14:31
稍微简化一下:
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结果处理中删除。
请注意,使用这组标记(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被ECHOed到FINDSTR中,它会尝试在currentdate中查找该字符串。>nul禁止FINDSTR的任何输出(因为我们对它不感兴趣)
ERRORLEVEL的值由findstr -0设置为not found,否则不为0。因此,如果ERRORLEVEL为1(或大于1),则执行ZIP操作。如果它的ZIP值为零,则表示找到了该字符串,并绕过了操作。
另请注意,表单
:: comment在block命令(通常在圆括号中的一系列命令)之外很好,但不应该在块内使用-在块中使用REM,否则可能会得到意外的结果。
https://stackoverflow.com/questions/16098832
复制相似问题