Shell 将FTP请求保存到字符串-->;将表达式调用到DOS

Shell 将FTP请求保存到字符串-->;将表达式调用到DOS,shell,powershell,ftp,cmd,Shell,Powershell,Ftp,Cmd,我想通过DOS命令行从PowerShell发送FTP请求,而不将其指向保存的脚本 我已尝试通过运行以下脚本来执行此操作,但出现以下错误: 调用表达式:在if语句中的“if”之后缺少“(”。在第18行 字符:18 +Invoke Expressioncmd/c不能将多行字符串作为参数。如果要执行多个语句,需要使用命令分隔符&将它们分隔开。但是,这里所做的基本上是在字符串参数中向其传递批处理文件 将here字符串的内容放在.bat文件中,然后运行cmd/c。您甚至不需要调用表达式。您可以从Power

我想通过DOS命令行从PowerShell发送FTP请求,而不将其指向保存的脚本

我已尝试通过运行以下脚本来执行此操作,但出现以下错误:

调用表达式:在if语句中的“if”之后缺少“(”。在第18行 字符:18
+Invoke Expression
cmd/c
不能将多行字符串作为参数。如果要执行多个语句,需要使用命令分隔符
&
将它们分隔开。但是,这里所做的基本上是在字符串参数中向其传递批处理文件


将here字符串的内容放在.bat文件中,然后运行
cmd/c
。您甚至不需要调用表达式。您可以从PowerShell提示符直接作为命令运行cmd。

谢谢您的提醒,但在我的第一句话中,我写了
我想发送一个FTP请求…而无需将其指向保存的脚本。
我最终做了你建议的只是为了有一个快速n脏的解决方案,但我仍然在寻找一种方法,不必从POSH脚本中指向一个文件。好的,我明白了,但我想知道的是,为什么要从PowerShell调用cmd来创建一个文本文件?为什么不直接运行
“user`npass`npwd`ncd DIR`nbinary`nget spec`nbye”>在PowerShell提示符下测试.ftp
?事实上,您有任何理由想使用cmd吗?ftp不是本机cmd命令,它是与Windows捆绑在一起的独立.exe(在system32目录中),可以直接从PowerShell调用。或者您可能会发现
(echo user pass pwd'cd DIR'binary'get spec'bye)-加入“`n”
更具可读性。
$cmd = '@echo off setlocal set uname=user
    set passw=pass
    set hostname=host
    set filespec=spec
echo %uname%>                     test.ftp 
echo %passw%>>                    test.ftp 
echo pwd>>                        test.ftp 
echo cd DIR>>                     test.ftp 
echo binary>>                     test.ftp 
echo get %filespec%>>             test.ftp 
echo bye>>                        test.ftp 
ftp -s:test.ftp %hostname% 
if errorlevel 1 pause 
endlocal 
' 
Invoke-Expression "cmd.exe /c $cmd"