使用批处理脚本过滤For循环中的特定字符串

时间:2014-12-18 07:25:40

标签: batch-file

目录结构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!
 )
)

1 个答案:

答案 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