Inserimento di codice in chiave di command del Registro di sistema

Sto provando a fare quello che è fatto in questa domanda, ma voglio collegarlo ad un menu contestuale in Directory in modo da poter fare clic con il button destro del mouse su "Flatten Folder" e farlo per me. Cioè, portre tutti i singoli file all'interno di quella cartella fino alla directory corrente, quindi eliminare la directory vuota.

Come posso appiattire una cartella in Windows 7, supponendo che tutti i nomi di file siano diversi?

Non sono sicuro di cosa sto facendo male? Nella chiave di command del Registro di sistema ho:

cmd /K "for /f %f in ('dir "%1\*" /s/b/a-d') do if not %~ff"=="%1" move "%f" "%1" && for /f %f in ('dir "%1\*" /s/b/ad') do if not "%~ff"=="%1" rd /s/q "%f" pause" 

EDIT: ho l'opzione del menu di scelta rapida, ma quando faccio clic su di esso, ottengo un errore dicendo che l'applicazione di un nome di piegatura non è stata trovata.

AGGIORNATO La mia modifica del Registro di sistema sembra così: Windows Registry Editor Versione 5.00

 [HKEY_CLASSES_ROOT\Directory\shell\Flatten Folder] @="Flatten Folder" [HKEY_CLASSES_ROOT\Directory\shell\Flatten Folder\command] @="cmd /K \"for /f %f in ('dir \"%1\\*\" /s/b/a-d') do if not %~ff\"==\"%1\" move \"%f\" \"%1\"" 

Ancora nessun dado, ma nessun errore.

Il problema è che la row in command non viene eseguita tramite cmd.exe – viene eseguita tramite Explorer, che non comprende il command incorporato di cmd.exe. Dovresti mettere lo script in un file separato (ad esempio, flatten.cmd ) e eseguirlo. (Si noti che devi modificare %f in %%f .)

Mi rendo conto che questo argomento è di pochi mesi, ma qui è il mio prendere sul command per quanto riguarda un menu contestuale:

Lo script da solo:

 (FOR /f "usebackq delims==" %%F IN (`DIR "%1" /ad/b/s`) DO IF NOT EXIST "%1\%%~nxF" MOVE "%%F" "%1") && (FOR /f "usebackq delims==" %%F IN (`DIR "%1" /ad/b/s ^| SORT /r`) DO RD "%%F") 

Come file .REG:

 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directory\Shell\FlattenFolder] @="Flatten Folder" [HKEY_CLASSES_ROOT\Directory\Shell\FlattenFolder\command] @="CMD.EXE /c (FOR /f \"usebackq delims==\" %%F IN (`DIR \"%1\" /ad/b/s`) DO IF NOT EXIST \"%1\\%%~nxF\" MOVE \"%%F\" \"%1\") && (FOR /f \"usebackq delims==\" %%F IN (`DIR \"%1\" /ad/b/s ^| SORT /r`) DO RD \"%%F\")" 

Questo è testato e funzionante su una configuration Win 7. Prima di tutto, lo script NON sposta un file nella directory principale se c'è già un file con quel nome. In secondo luogo, lo script poi, in senso inverso, rimuove tutte le directory vuote, saltando tutto ciò che potrebbe non essere vuoto a causa di un conflitto di denominazione. Credo che la questione @ MAW74656 avesse dovuta agli spazi nei routes. Il "usebackq delims==" affronta questo problema.

Il lato positivo di questa implementazione è che funziona. Non tocca file con lo stesso nome. Non rimuove una directory a less che non sia vuota.