如何在批处理文件中加倍条件?
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
)
我在编写具有两个条件的脚本时遇到问题。我想检查扩展名和文件名的一部分。我需要对当天的扩展名为 .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
)