如何在批处理文件中使用双重条件?

15 浏览
0 Comments

如何在批处理文件中使用双重条件?

我在编写一个带有两个条件的脚本时遇到了问题。我想要检查文件的扩展名和文件名的一部分。我需要对当天扩展名为.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感谢您的帮助和建议。

0
0 Comments

批处理文件中的条件判断中,使用%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
)

谢谢您的时间和答案。

0