WinSCP:如何在不解析 WinSCP 脚本上的双引号的情况下输入带空格的脚本参数?

WinSCP : How to enter a script parameter with spaces without resolving the double quotes on WinSCP script?

我正在使用批处理文件编写脚本。

echo open sftp://user:pass@cagprod/ >> script.tmp
echo option batch continue >> script.tmp
echo option confirm off >> script.tmp

echo cd /ccr/ccar_modsub/Unsecured_Production/CCAR_Models/Model_Code_Version/Acct_lvl/HK_CARD/Code >> script.tmp
echo get * "Y:. Documents\Automated file copying\%3\Code\" >> script.tmp

echo close >> script.tmp
echo exit >> script.tmp
"Y:\Winscp\winscp382.exe" /console /script=script.tmp /parameter
del script.tmp

我想要 %3 参数(它包含空格,所以我必须使用双引号调用它)当我在命令行上调用它时没有任何双引号解决,如下所示 -

"i:\CAP_Profile\Desktop\Automation file copying\script2.bat" "Data setp\Code line"

此外,是否有更好的方式为 WinSCP 脚本声明变量?

%~3 扩展输入变量 %3 删除周围的引号。您还可以通过不在每一行中都双重重定向到文件来做一个稍微干净的脚本。

@echo off
>script.tmp (
  echo open sftp://user:pass@cagprod/
  echo option batch continue
  echo option confirm off
  echo cd /ccr/ccar_modsub/Unsecured_Production/CCAR_Models/Model_Code_Version/Acct_lvl/HK_CARD/Code
  echo get * "Y:. Documents\Automated file copying\%~3\Code\"
  echo close
  echo exit
 )

此外,作为原始代码中需要注意的事项。进行重定向时,请注意重定向前的 whitespace,因为任何 whitespace 实际上都是作为输出的一部分传输的,因此虽然在大多数情况下这无关紧要,但它可以有所作为。为了证明这一点,只需 运行 来自 cmdline 的这些:

type nul>test_file.txt
echo Hello >> test_file.txt

然后执行 notepad test_file.txt 并注意 Hello 之后的尾随 space 您可以重复以下操作以查看没有尾随的白色 spaces:

type nul>test_file.txt
echo Hello>>test_file.txt