[英]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
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.