如何在批处理文件中加倍条件?

How to double conditions in batch file?

我在编写具有两个条件的脚本时遇到问题。我想检查扩展名和文件名的一部分。我需要对当天的扩展名为 .doc 的文件执行操作

我对这个脚本有疑问。这是我所做的,但它只部分起作用:

@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
        )
    )
)

我不明白为什么 %ERRORLEVEL% 的输出总是等于 0。

这里是树结构的摘录:

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

如果您有其他解决方案,我很感兴趣! 感谢您的帮助和建议。

%errorlevel% 始终为 0,因为 %variables% 不会在 ( ) 块内更新。您需要延迟扩展:

@echo off
setlocal enableextensions enabledelayedexpansion
if 1==1 (
  set foo=bar
  echo !foo!
)

但还有更好的方法。您可以在代码块中使用较旧的 if not errorlevel 1 语法,但在这种特定情况下,您可以让循环为您过滤:

for /R D:\testDir %%i in (*_%year%_%month%_%day%.doc) do (
  echo %%i
)