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

时间:2019-01-31 15:01:01

标签: batch-file cmd 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脚本的变量?

1 个答案:

答案 0 :(得分:1)

%~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
相关问题