2017-02-03 14 views
0

У меня есть этот код:Какой символ является escape-символом в cmd?

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

это для загрузки файла.
Когда я выполняю его в cmd на удаленном сервере - все в порядке.
Но когда я хочу выполнить этот код с моего компьютера на удаленном сервере с помощью paexec, у меня есть некоторые проблемы с escape-символами.
Команда в моем 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) для побега, но имеет один и тот же результат.
Помогите с этим или дайте совет, как я могу удаленно загрузить файл с помощью командной строки.

+0

http://stackoverflow.com/questions/10296162/escaping-special-characters-in-cmd –

+0

Я пробовал это. Не работайте. –

+0

обратная сторона? также, почему вы делаете 'cmd/c', когда можете напрямую вызвать powershell? – 4c74356b41

ответ

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 "&{...}" 
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) 

Надежда, что помогает

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

DO:

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

Это должно делать вашу работу.

Надеюсь, это поможет.