如何在批处理文件中使用双重条件?
如何在批处理文件中使用双重条件?
我在编写一个带有两个条件的脚本时遇到了问题。我想要检查文件的扩展名和文件名的一部分。我需要对当天扩展名为.doc的文件执行操作。我在这个脚本中遇到了问题。以下是我已经做的,但它只部分起作用:\n
@echo off chcp 1252 set Pathname="D:\testDir" set year=%date:~-4% set month=%date:~-7,2% set day=%date:~-10,2% set logfile=%Pathname%\logs\log.txt cd %Pathname% d: for /R %%i in (*) do ( if "%%~xi"==".doc" ( echo "%%i"|findstr /i /L "%year%_%month%_%day%">nul if %ERRORLEVEL%==0 ( echo "file : %%i worked and does an output at %time%" >> %Pathname%\logs\log.txt ) ) )
\n我不明白为什么%ERRORLEVEL%的输出始终等于0。\n以下是目录结构的摘录:\n
D:\testDir\directory1\test_2021_11_07.doc D:\testDir\directory1\test_2021_11_07.log D:\testDir\directory1\test_2021_11_08.doc D:\testDir\directory1\test_2021_11_08.log D:\testDir\directory1\test_2021_11_09.doc D:\testDir\directory1\test_2021_11_09.log D:\testDir\directory1\test_2021_11_10.doc D:\testDir\directory1\test_2021_11_10.log D:\testDir\directory2\test_2021_11_07.doc D:\testDir\directory2\test_2021_11_07.log D:\testDir\directory2\test_2021_11_08.doc D:\testDir\directory2\test_2021_11_08.log D:\testDir\directory2\test_2021_11_09.doc D:\testDir\directory2\test_2021_11_09.log D:\testDir\directory2\test_2021_11_10.doc D:\testDir\directory2\test_2021_11_10.log D:\testDir\directory3\test_2021_11_07.doc D:\testDir\directory2\test_2021_11_07.log D:\testDir\directory3\test_2021_11_08.doc D:\testDir\directory2\test_2021_11_08.log D:\testDir\directory3\test_2021_11_09.doc D:\testDir\directory2\test_2021_11_09.log D:\testDir\directory2\test_2021_11_10.doc D:\testDir\directory2\test_2021_11_10.log D:\testDir\logs\log.txt
\n如果您有其他解决方案,我很感兴趣!\n感谢您的帮助和建议。
批处理文件中的条件判断中,使用%errorlevel%无法正确更新变量的值,导致始终为0。解决方法是使用延迟扩展(delayed expansion):
off setlocal enableextensions enabledelayedexpansion if 1==1 ( set foo=bar echo !foo! )
但还有更好的方法。在此特定情况下,可以让循环自动过滤:
for /R D:\testDir %%i in (*_%year%_%month%_%day%.doc) do ( echo %%i )
感谢您的答案,它非常有效!是否可以匹配字符串中的任何位置的日期呢?比如文件名为:test_2021_11_07_21-10-49.doc?
好的,我明白了!只需这样做:
for /R D:\testDir %%i in (*_%year%_%month%_%day%.doc) do ( echo %%i )
谢谢您的时间和答案。