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

问题描述

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

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:\1. 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 脚本声明变量?

标签: batch-filecmdwinscp

解决方案


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

@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:\1. Documents\Automated file copying\%~3\Code\"
  echo close
  echo exit
 )

此外,作为原始代码中需要注意的事项。进行重定向时,请在重定向之前注意空格,因为任何空格实际上都是作为输出的一部分传输的,因此尽管在大多数情况下这无关紧要,但它可以产生影响。为了证明这一点,只需从 cmdline 运行这些:

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

然后在您可以重复以下操作以查看没有尾随空格notepad test_file.txt之后,请注意尾随空格:Hello

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

推荐阅读