无法让文件掩码在 PowerShell 的多行 WinSCP 命令行中正常工作

Cant get filemask to work properly in multi-line WinSCP command-line in PowerShell

我正在尝试使用 WinSCP 创建一个 PowerShell 脚本来自动执行 SFTP 传输。我可以连接并进行简单的传输,但我只想传输昨天的文件。为此,我需要一个我无法开始工作的文件掩码。

下面是我的代码。我正在使用这个脚本,将其放入 Notepad++,将其另存为 PowerShell 脚本并 运行。 SFTP 连接部分工作,因为我用它来抓取 SFTP 上的所有文件。所以我确定它是文件掩码部分。

& "C:\Program Files (x86)\WinSCP\WinSCP.com" `
  /log="\blah\blah\users\vmedhe\thing.log" /ini=nul `
  /command `
    "open sftp://username:password@sftpsite -hostkey=`"`"not real host key=`"`"" `
    "cd /" `
    "lcd C:\Test_case" ` 
    "get -filemask=`"`">yesterday`"`" shares" `
    "get -filemask=`"`">yesterday`"`" *.*" `
    "exit"

$winscpResult = $LastExitCode
if ($winscpResult -eq 0)
{
  Write-Host "Success"
}
else
{
  Write-Host "Error"
}

exit $winscpResult

不幸的是,我不断收到错误消息:

At C:\Powershell_Scripts\mXpress_main.PS1:9 char:2
+     "get -filemask=`"`">yesterday`"`" *.*" `
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Unexpected token '"get -filemask=`"`">yesterday`"`" *.*"' in expression or statement. At C:\Powershell_Scripts\mXpress_main.PS1:10 char:5
+     "exit"
+     ~~~~~~ Unexpected token '"exit"' in expression or statement.
    + CategoryInfo          : ParserError: (:) [], ParseException
    + FullyQualifiedErrorId : UnexpectedToken

我的文件掩码有问题,但我不确定是什么。任何帮助都会很棒。

这不是文件掩码。 – 在 lcd 行的(看似)末尾的反引号后有一个 space。

所以反引号会转义 space,而不是换行符。因此,get 行被解释为新的 PowerShell 代码行。

它基本上是这个常见的 WinSCP 批处理文件问题的 PowerShell 等价物:
https://winscp.net/eng/docs/faq_batch_file#newline_escaping


虽然一般来说,in PowerShell, you should use WinSCP .NET assembly.

谢谢,这确实是问题所在。以下是所有未来 google 的最终代码。

& "C:\Program Files (x86)\WinSCP\WinSCP.com" `
  /log="\blah\blah\users\fake\thing.log" /ini=nul `
  /command `
    "open sftp://username:password@sftpname/ -hostkey=`"`"junk host key=`"`"" `
    "cd /" `
    "lcd C:\test_area" `
    "get -filemask=`"`">yesterday`"`" shares" `
    "get -filemask=`"`">yesterday`"`" *.*" `
    "exit"

$winscpResult = $LastExitCode
if ($winscpResult -eq 0)
{
  Write-Host "Success"
}
else
{
  Write-Host "Error"
}

exit $winscpResult