通过网络路径批处理文件

Batch file over network path

我有以下批处理脚本可以让工作更轻松。

这是它的工作原理:

1- 将一些文件拖放到 .bat
2- 在 "menu"
上选择文件的目的地 3- 将文件脚本复制到目标文件夹
4- 脚本执行远程过程(即 PSexec 行)
5- 将远程过程的结果脚本复制到其他文件夹。

这很好用...除了一个 "small" 细节,我需要一些帮助。

当我尝试复制网络位置 \10.250.39.116\d%... 如果我之前没有登录过那台机器,它将无法工作。

我一直在研究 'net use' 命令来克服这个问题,但我不确定它是否适合我的需要。

我总共需要验证 4 台不同的机器,具体取决于菜单的选择。

实际问题:

我可以使用批处理登录到此类机器,并避免每次 运行 脚本时创建重复连接吗?如果是,怎么做?

感谢您的宝贵时间! :)

我知道我的路径都指向同一个地方:)

@echo off

setlocal enabledelayedexpansion



ECHO.
ECHO ...............................................
ECHO PRESS 1, 2 OR 3 to select your task, or 4 to EXIT.
ECHO ...............................................
ECHO.
ECHO 1 - Compilar em Qualidade
ECHO 2 - Compilar na HSDEV
ECHO 3 - Compilar nas DEMOS
ECHO 4 - EXIT
ECHO.
SET /P M=Type 1, 2, 3, or 4 then press ENTER:
IF %M%==1 GOTO :QUAL
IF %M%==2 GOTO :HSDEV
IF %M%==3 GOTO :DEMO
IF %M%==4 GOTO EOF


:QUAL
set "PathForms6=\10.250.39.116\d$\GLINTTHSIAS\GLINTTHS\compilador\fmb6i\GH\"
set "PathForms10=\10.250.39.116\d$\GLINTTHSIAS\GLINTTHS\compilador\fmb10\GH\"
set PathCompilador=\10.250.39.116 -u Administrator -p Password1 cmd "/C d: & cd d:\GLINTTHSIAS\GLINTTHS\compilador & GH_PRIV_10_02_Forms.bat"
set PathDestinoPriv=\10.250.39.116\d$\GLINTTHSIAS\GLINTTHS\PRIV\GH
set PathDestinoPub=\10.250.39.116\d$\GLINTTHSIAS\GLINTTHS\PUB\GH
goto :PROCESSA
goto EOF


:HSDEV
set "PathForms6=\10.250.39.116\d$\GLINTTHSIAS\GLINTTHS\compilador\fmb6i\GH\"
set "PathForms10=\10.250.39.116\d$\GLINTTHSIAS\GLINTTHS\compilador\fmb10\GH\"
set PathCompilador=\10.250.39.116 -u Administrator -p Password1 cmd "/C d: & cd d:\GLINTTHSIAS\GLINTTHS\compilador & GH_PRIV_10_02_Forms.bat"
set PathDestinoPriv=\10.250.39.116\d$\GLINTTHSIAS\GLINTTHS\PRIV\GH
set PathDestinoPub=\10.250.39.116\d$\GLINTTHSIAS\GLINTTHS\PUB\GH
goto :PROCESSA
goto EOF

:DEMO
set "PathForms6=\10.250.39.116\d$\GLINTTHSIAS\GLINTTHS\compilador\fmb6i\GH\"
set "PathForms10=\10.250.39.116\d$\GLINTTHSIAS\GLINTTHS\compilador\fmb10\GH\"
set PathCompilador=\10.250.39.116 -u Administrator -p Password1 cmd "/C d: & cd d:\GLINTTHSIAS\GLINTTHS\compilador & GH_PRIV_10_02_Forms.bat"
set PathDestinoPriv=\10.250.39.116\d$\GLINTTHSIAS\GLINTTHS\PRIV\GH
set PathDestinoPub=\10.250.39.116\d$\GLINTTHSIAS\GLINTTHS\PUB\GH
goto :PROCESSA
goto EOF



:PROCESSA
set argCount=0
for %%x in (%*) do (
   set /A argCount+=1
   set "argVec[!argCount!]=%%~nx"
   set "pathVec[!argCount!]=%%~dpx"

)


rem echo Number of processed arguments: %argCount%


for /L %%i in (1,1,%argCount%) do (

    echo Vou compilar %%i - "!argVec[%%i]!"

if exist %PathForms6%!argVec[%%i]!.* del /q %PathForms6%!argVec[%%i]!.*
if exist %PathForms10%!argVec[%%i]!.* del /q %PathForms10%!argVec[%%i]!.*

robocopy "!pathVec[%%i]!." %PathForms6% !argVec[%%i]!.fmb > nul

) 

c:
cd  c:\pstools
psexec %PathCompilador%


 for /L %%i in (1,1,%argCount%) do (

if exist "%PathForms10%!argVec[%%i]!.fmx" (
 xcopy  %PathForms10%!argVec[%%i]!.fmx %PathDestinoPriv% /y
 xcopy  %PathForms10%!argVec[%%i]!.fmx %PathDestinoPub% /y)
 )

pause

您对 net use 进行了多少测试?在命令行中尝试 运行 两次。注意输出在第二个 运行:

处的变化

如您所见,在已经建立连接的情况下,net use 将输出连接摘要,而不是创建重复连接。


如果您愿意,可以使用 conditional execution 或错误级别检查。使用此方法,您可以避免调用 net use 直到 xcopy 失败,这应该只是第一次。这是一个简短的例子,只是为了说明机制:

@echo off
setlocal

ping -n 1 10.250.39.116 | find /i "TTL=" >NUL || (
    echo 10.250.39.116 is offline.  Unable to continue.  Press any key to exit.
    pause >NUL
    goto :EOF
)

call :xcopy "%~1" "destination"

echo Press any key to exit.
pause >NUL
net use \10.250.39.116\d$ /delete >NUL 2>NUL
goto :EOF

:xcopy <source> <dest_dir>
xcopy /L "%~1" "%~2" 2>NUL || (
    net use \10.250.39.116\d$ /user:username password >NUL 2>NUL
    xcopy /L "%~1" "%~2"
)
goto :EOF