@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命令,那么它会完美地改变为远程目录但是如果它没有多个命令。
答案 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 /?