Я создал элемент контекстного меню Windows, чтобы выполнить команду powershell. Однако я не могу понять, как передать % 1 моему сценарию Powershell с экранированными кавычками.Добавление команды PowerShell в контекстное меню Windows (и правильное выполнение кавычек)
Текущая запись в реестре:
[HKEY_CLASSES_ROOT\*\shell\Share file on FTP\Command]
@="cmd.exe /C nircmd elevate PowerShell -NoProfile -NoLogo -Command \"& {(dir \"%1\" | Copy-ToFTP -Destination Public.Screenshots).source | clip}\""
Выдает следующую ошибку при выборе файла через "Общий доступ к файлам на FTP" пункт контекстного меню:
dir : Cannot find path 'D:\Multimedia' because it does not exist.
At line:1 char:5
+ & {(dir D:\Multimedia Files\Pictures\HTPC\20150328_220120.jpg | Copy-ToOnedrive ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (D:\Multimedia:String) [Get-ChildItem], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
БОНУС В настоящее время я использую сторонний инструмент Nircmd, чтобы поднять подсказку Powershell (так как моя powershell co mmand нуждается в этом). Если возможно, я хотел бы использовать родную Windows, чтобы сделать это вместо этого (сохраняя мой код команды до одной строки, если это возможно) .... NOT after, создав сценарий Powershell PS1, который поднимает себя.
EDIT: Ниже строки кода «должны» работать .. Однако, вместо того, чтобы путь аа ShortName, я получаю неожиданный неправильный результат:
Я скопировать и вставить значение ключа реестра сделать его более удобным для чтения (вместо REG-содержимого файла)
cmd.exe /c for %%A in (%1) do @set I=%%~sA | PowerShell.exe -NoExit -NoProfile -NoExit -NoLogo -Command "& {(dir %I% | Copy-ToFTP -Destination Public.Screenshots).source | clip}"
в конечном счете производит этот выход в Powershell:
dir : Cannot find path 'D:\Multimedia Files\Pictures\HTPC\:433310880:4624'
because it does not exist.
Я думаю, что на самом деле завинчивания меня является то, что *** % ~ s1 *** не работает под Windows 8.1 co mmand-interpreter, cmd. Я использовал эту технику сокращения в десятки раз под Win7 и ранее. Следовательно, даже самый простой пакетный файл с *** *** echo% ~ s1 *** возвращает полный путь без каких-либо сокращений или ошибок. – MKANET
Я предполагаю, что сложность синтаксиса будет довольно сложной; или, я бы, наверное, уже видел рабочие ответы – MKANET