我写了以下脚本,它会要求用户输入密码作为参数。如果我输入密码"Hello&123"
,它会失败,但是对于其他情况,如!Hello&123>
,它可以正常工作。请建议一些好的方法来克服这种情况。
TestScript1.bat
@echo off
setlocal
set "psCommand=powershell -Command "$pword = read-host 'Enter password:' -AsSecureString ; ^
$BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword); ^
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)""
for /f "usebackq delims=" %%p in (`%psCommand%`) do set password=%%p
if "%password%" == "" @echo password cannot be empty & goto DIE
TestScript2.bat.bat testuser "192.168.1.1" "%password%"
endlocal
:DIE
exit /b 1
TestScript2.bat
@echo off
echo n | psftp %1@%2 -pw %3 -b Test3.bat >> TestLog.log 2>&1
TestScript1.bat
继承状态,但为了编写一个好的脚本,您应该显式启用它。但即使这样也不起作用,因为在psftp -pw !%3!
部分仍然会失败,因为您会再次遇到无法按值传输任意内容的问题。 - jebTestScript2.bat
。 - jeb