【问题标题】:Which symbol is escape character in cmd?哪个符号是cmd中的转义字符?
【发布时间】:2017-02-03 21:00:07
【问题描述】:

我有这个代码:

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 中)进行转义,但结果相同。
对此提供帮助或提供建议,我如何使用命令行远程下载文件。

【问题讨论】:

  • 我试过这个。不要工作。
  • 反引号?还有,可以直接调用powershell,为什么还要cmd /c呢?
  • 嗯,你是对的。我可以使用 powershell.exe “mycommand”。我忘记了。

标签: powershell command-line cmd


【解决方案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 "&{...}"

【讨论】:

    【解决方案2】:

    是否可以完整地使用 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)
    

    希望有帮助

    【讨论】:

      【解决方案3】:

      而不是这个:

      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')}"
      

      这应该可以完成您的工作。

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 2021-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-11
        • 1970-01-01
        • 1970-01-01
        • 2011-01-02
        相关资源
        最近更新 更多