目录结构C:Test\client1,C:\Test\client2....
这里我需要仅针对特定客户端执行_Test.cmd文件。
请告诉我如何使用批处理脚本过滤此for循环中的客户端名称?
@Echo Off
setlocal enableDelayedExpansion
for /r C:\Install %%x in ("*_Test.cmd") do (
ECHO [ !DATE! !TIME! ] Executing %%x ...
CD %%~dx%%~px
CALL _Test.cmd
IF ERRORLEVEL 0 (
ECHO [ !DATE! !TIME! ] Successful!
)
)
答案 0 :(得分:1)
不知道如何区分“客户名称”和“非客户名称”。
如果您的意思是“目录名称”,其中每个客户端都有一个目录,那么:
@Echo Off
setlocal enableDelayedExpansion
pushd
for /d /r C:\test %%x in (.) do (
ECHO [ !DATE! !TIME! ] Executing %%x ...
CD %%~dpx
CALL _Test.cmd
IF NOT ERRORLEVEL 1 (
ECHO [ !DATE! !TIME! ] Successful!
)
)
popd
注意:
pushd / popd括号保存当前目录并在for
循环后恢复。
for /d /r
表示目录,递归
目标“。”意为“全部” - 如果你有一个面具可以申请,就把这个面具放在这里。
cd %%~dpx
只比您的版本短。
if errorlevel 0
总是如此。 if errorlevel n
表示“如果errorlevel为n 或大于n ”。 cmd
可能会被迫errorlevel
为负,但这是一种人为的情况。
“我只需要为client24,client15,client40等特定客户端运行_Test.cmd。”
现在如果你说要开始......
@Echo Off
setlocal enabledelayedexpansion
pushd
for /f "delims=" %%x in (yourfileofclients.txt) do if exist "c:\test\%%~x\." (
ECHO [ !DATE! !TIME! ] Executing %%x ...
CD "c:\test\%%~x"
CALL _Test.cmd
IF NOT ERRORLEVEL 1 (
ECHO [ !DATE! !TIME! ] Successful!
)
)
popd