哪个符号是cmd中的转义字符?

时间:2017-02-03 21:00:07

标签: powershell command-line cmd

我有这段代码:

powershell -command "& { (New-Object Net.WebClient).DownloadFile('linkToMyFile.file', 'C:\my.file') }"

下载文件。
当我在远程服务器上的cmd中执行它时 - 一切正常 但是当我想使用paexec从远程服务器上的计算机执行此代码时,我遇到了一些转义符问题 我的CMD中的命令:

psexec.exe \\remoteServer.0.1 -u username -p password -dbg -lo D:\PsExec.log cmd /c "powershell -command "& { (New-Object Net.WebClient).DownloadFile('linkToMyFile.file', 'C:\my.file') }""

我尝试使用^符号,但同样的错误;
代码使用^符号表示双引号:

psexec.exe \\remoteServer.0.1 -u username -p password -dbg -lo D:\PsExec.log cmd /c "powershell -command ^"& { (New-Object Net.WebClient).DownloadFile('linkToMyFile.file', 'C:\my.file') }^""

此外,我尝试使用\(如在PHP中)进行转义,但结果相同 请帮助解决这个问题,或者提供如何使用命令行远程下载文件的建议。

3 个答案:

答案 0 :(得分:1)

不幸的是,CMD使用different escape characters取决于转义的内容和位置。在任何地方都没有单一的转义字符。

在大多数情况下,通过在插入符号(^)前加上下一个字符进行转义,例如在for /f循环中:

for /f "tokens=1" %%a in ('type file.txt ^| find "something"') do ...

但有时字符会因为加倍而逃脱,例如批处理脚本中的字符百分比(%):

@echo off
echo %%DATE%%=%DATE%

有时你甚至可能需要输入其他转义字符(比如反斜杠),因为你需要转义不是为了CMD的东西,而是为了传递字符串的命令:

mountvol | findstr /r \\\\

但是,您的特定方案不应该需要额外的引号或转义。只需直接运行PowerShell命令行,不需要cmd /c

paexec.exe \\remoteServer.0.1 -u username -p password powershell -command "&{...}"

答案 1 :(得分:0)

是否有可能以完整的方式使用powershell?如果是这样,您可以尝试以下方法:

New-PsDrive -Name X -Root \\127.0.0.1\c$ -PsProvider FileSystem -Credential (Get-Credential)
Copy-Item -Path X:\RequestedFile.txt -Destination C:\Temp
Remove-PsDrive -Name X

如果您的目的地是http地址,则可以执行以下操作:

Invoke-WebRequest -Uri http://some.uri -Method Get -OutFile C:\temp\myfile -Credential (Get-Credential)

希望有所帮助

答案 2 :(得分:0)

而不是:

psexec.exe \\remoteServer.0.1 -u username -p password -dbg -lo D:\PsExec.log cmd /c "powershell -command "& { (New-Object Net.WebClient).DownloadFile('linkToMyFile.file', 'C:\my.file') }""

做到这一点:

psexec.exe \\remoteServer.0.1 -u 'username' -p 'password' powershell.exe -Command "& {(New-Object System.Net.WebClient).DownloadFile('linkToMyFile.file', 'C:\my.file')}"

这应该做你的工作。

希望它有所帮助。