2016-02-03 5 views
2

Как выполнить команду rename в PowerShell только для выбранных файлов в проводнике? У меня есть команда PS, но я не знаю, где ее можно включить в реестр Windows, чтобы быть доступным в контекстном меню правой кнопки мыши в проводнике.Выполнение команды PowerShell для выбранных файлов в проводнике

+0

Я также очень заинтересован в добавлении (и запуске) сценариев PowerShell, щелкнув правой кнопкой мыши на вещах. Если это возможно, пожалуйста, дайте мне знать :) – Shark

+1

Возможный дубликат [Как запустить PowerShell из проводника Windows?] (Http://stackoverflow.com/q/183901/1630171). –

+0

Не совсем дубликат. В этой статье показано, как открыть PowerShell, щелкнув правой кнопкой мыши папку или фон папки в проводнике. Этот вопрос предназначен для запуска команды PowerShell в файлах через меню правой кнопки мыши. –

ответ

1

HKCR: \ * \ shell содержит то, что вам нужно. Создайте новый ключ с именем того, что вы хотите назвать (например, «Переименовать с датой»), затем подраздел «Команда» со значением по умолчанию вашей команды.

Так, например, HKCR:\*\shell\Rename With Date\Command, где значение (по умолчанию) равно PowerShell -Command Rename-Item "%1" ((Get-Date).ToShortDateString() + " - %1"), или что-то должно сделать трюк, который я думаю.

+0

На самом деле я сомневаюсь, что эта конкретная команда будет работать, потому что Rename-Item просто ожидает имя файла во втором параметре, а не весь путь, поэтому вам нужно разделить путь, чтобы получить только имя файла и расширение, но я cba - это просто пример xP –

+0

Я попробовал команду в сеансе powershell, и это заслоняло о косых чертах, возвращаемых датой. Поэтому ему нужно что-то вроде '' (get-date) .toShortDateString(). Replace ("/", "-") ...) ' – stib

1

Это довольно легко добавить команду контекстного меню для выбранных файлов в File Explorer с помощью Powershell, чтобы написать командную строку в реестре:

# Add a context-menu item named 'Foo' to the context menu of files 
# that executes a PowerShell command that simply echoes the file path given. 
$null = New-ItemProperty ` 
    -LiteralPath (New-Item -Force "HKCU:\Software\Classes\*\shell\Foo\command").PSPath ` 
    -Name '(Default)' ` 
    -Value "$PSHOME\powershell.exe -noprofile -noexit -command '`"%1`"'" 

Вышеуказанные цели HKCU:\Software\Classes\*\shell (HKEY_CURRENT_USER\Software\Classes\*\shell) и поэтому применяется к файлам; папка только HKCU:\Software\Classes\Folder\shell, а для и файлы и папки - HKCU:\Software\Classes\AllFileSystemObjects\shell.
Также обратите внимание на использование -LiteralPath, что имеет решающее значение для предотвращения интерпретации * в HKCU:\Software\Classes\* в качестве подстановочного знака.
Обратите внимание, что запись в эквивалентные клавиши HKEY_LOCAL_MACHINE, чтобы сделать команду доступной для , все пользователям потребуется отметка.

предостережение является то, что при таком подходе команда вызывается для каждого выбранного файла, следует несколько файлов выбрать.

Другими словами: если ваше намерение состоит в том, чтобы переименовать группу файлов и ваша переименованием логика требует, чтобы группа считается в целом, выше подход не будет работать.

Вы можете попытаться обойти это в самом скрипте, но это было бы нетривиально.

Более надежное решение является создание обработчиков контекстного меню, который требует написания «в процессе производства модели компонентных объектов (COM) объекты реализованы в виде библиотек DLL» (от docs).