2

Я нашел несколько таких вопросов и попытался адаптировать ответы к своим потребностям, но пока не повезло. Я пытаюсь создать две записи контекстного меню в Windows 7, которые бы:

  1. Переместите все файлы из подпапок в данной папке в родительскую папку. Дубликаты должны быть переименованы в Filename-Duplicate но не удалены.
  2. Удалить все пустые подпапки.

Мне удалось успешно создать необходимые записи в:

HKEY_CLASSES_ROOT\Directory\shell\Delete Empty Subfolders\command

а также

HKEY_CLASSES_ROOT\Directory\shell\Move all subfiles here\command

Команды (и я думаю, что здесь кроется проблема) следующие:

for /r ROOT %%d in (*.*) do move "%%d" "%1\"
for /f "delims=" %%d in ('dir /s /b /ad ^| sort /r') do rd "%%d"

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

Я думаю, что проблема в самих командах. Я тоже не очень опытен с FOR . Если это может быть достигнуто с PowerShell, я открыт для этой опции. Если это вообще возможно, я бы избегал использования внешних зависимостей, таких как сторонние приложения, для выполнения команд.

1 ответ1

0

Проблема не в вашей команде. Вместо этого он связан с реестром, потому что когда вы сделаете это, Windows начнет искать программу for.exe

HKCU\Software\Microsoft\Windows\CurrentVersion\App Paths\for.exe
HKCU\Software\Microsoft\Windows\CurrentVersion\App Paths\for.exe

и затем он начинает искать вашу программу for.* в System32 и каталогах Windows. Когда это не удается, возвращается ошибка.

Для начала попробуйте создать файл .bat и поместить в него свои команды. В реестре попробуйте указать полный путь к вашему пакетному файлу.

PS: у вас будет другая проблема с длинными именами файлов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .