首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >批处理:忽略当前日期作为其名称的一部分的文件或在当前日期创建的文件的处理

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

Stack Overflow用户
提问于 2013-04-19 14:48:42
回答 1查看 210关注 0票数 0

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

代码语言:javascript
复制
filename_2013-04-18.log
filename_2013-04-19.log

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

代码语言:javascript
复制
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正在正确打印文件名。而且,要压缩的代码也工作得很好。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-19 15:14:31

稍微简化一下:

代码语言:javascript
复制
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分配给第三个标记。

为了便于阅读,在标示的点处换行是安全的

代码语言:javascript
复制
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
 )

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

文件名所在的字符串%%cECHOed到FINDSTR中,它会尝试在currentdate中查找该字符串。>nul禁止FINDSTR的任何输出(因为我们对它不感兴趣)

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

另请注意,表单

代码语言:javascript
复制
:: comment

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16098832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档