如何在windows for循环中使用2个以上的命令

时间:2016-01-29 22:57:10

标签: windows batch-file

@echo off
set instance=%username:~2%
setlocal enabledelayedexpansion
for /f "delims=" %%i in (servers.txt) do (
set server=%%i
echo server is !server!
pushd \\%%i\D$\%instance%\Hyperion\EPMSystem11R1\OPatch

echo current directory is %CD%
)

其中servers.txt包含服务器名称。

这里如果我在for循环中包含onlu pushd命令,那么它会完美地改变为远程目录但是如果它没有多个命令。

2 个答案:

答案 0 :(得分:0)

pushd \\%%i\D$\%instance%\Hyperion\EPMSystem11R1\OPatch

echo current directory is !CD!

POPD

如果你继续push,那么最终你将会耗尽。

您需要使用!CD!代替%CD%,因为%cd%将在分析时进行评估和替换,从而显示误导性结果。 !cd!将显示运行时值。

你也可以CALL echo current directory is %%CD%%

答案 1 :(得分:0)

当前在网络中无法使用其中一个要连接的服务器。命令 PUSHD 在错误时退出值1,而在成功时退出0。仅当驱动器映射到网络共享非常成功时,才可以使用此命令执行所有其他命令。

以下代码表明:

@echo off
if not exist servers.txt goto :EOF
setlocal EnableDelayedExpansion
set "instance=%username:~2%"
for /f "delims=" %%i in (servers.txt) do (
    echo Server is %%~i
    pushd "\\%%~i\D$\%instance%\Hyperion\EPMSystem11R1\OPatch" 2>nul
    if not errorlevel 1 (
        echo Current directory is !CD!
        rem Other commands.
        popd
    ) else (
        echo Not found: \\%%~i\D$\%instance%\Hyperion\EPMSystem11R1\OPatch
    )
)
endlocal

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • echo /?
  • endlocal /?
  • for /?
  • goto /?
  • if /?
  • popd /?
  • pushd /?
  • rem /?
  • set /?
  • setlocal /?