Come posso spostare tutti i file in un albero nella radice dell'albero?


10

Ho una cartella (chiamiamola A) con molte sottocartelle B, C, D, E, che poi hanno di nuovo sottocartelle B1, B2, B3, ... C1, C2, C3 ...

Come posso utilizzare cmd per spostare tutti i file da tutte le sottocartelle nella cartella "root" A?


Suppongo che desideri tutti i file in una radice, non nelle sottocartelle? Quindi A \ File1, A \ File2, non A \ Cartella2 \ File1?
Luke canadese,

@Luke - Sì, ce l'hai. Ogni file esistente in cartelle e sottocartelle viene spostato nella directory principale.
Rook,

Risposte:


12

Il mio post originale ha trascurato di includere l'estensione del file nel comando di spostamento. %~nirestituisce solo il nome base, è necessario utilizzare %~nxiper ottenere sia il nome file che l'estensione! Spero che tu non abbia alterato i tuoi nomi di file sul mio account!

Da un prompt dei comandi:

cd /d C:\Path\To\A
for /r %i in (*) do @move "%i" "%~nxi"

Se in seguito è necessario ripulire le cartelle vuote:

for /d %i in (*) do @rd /s /q "%i"

Ora, se hai degli scontri con i nomi dei file, sei da solo. È possibile aggiungere il /yparametro al movecomando (prima di "%i") per forzare le sovrascritture. Se vuoi qualcosa di diverso, avrai bisogno di un altro programma in grado di rinominare automaticamente tutto per te.

Inoltre, se si desidera utilizzarlo in un file batch, modificare tutto %in %%.


Non lo sapevo FOR /r- bello!
Daniel Beck

Wow, davvero fantastico. Mi inchino al tuo comando-fu.
Mokubai

2

Crea una cartella e copia tutte le altre cartelle in essa contenute, quindi fai clic con il tasto destro su quella cartella e seleziona Cerca . Nella casella di ricerca immettere *.*.

Questo elencherà tutti i file e le cartelle. Seleziona tutti i file che desideri nella directory principale e tagliali. Passare alla directory principale e incollare tutti i file lì.


la ricerca non esiste come comando nel mio cmd.
Torre del

Richard non stava parlando di un comando. Ho modificato la sua risposta per renderlo più chiaro.
Isaac Rabinovitch il

0

Installa Cygwin (o un altro ambiente Unix per Windows) ed esegui quanto segue:

cd A
find . -type f -exec mv {} . \;

A seconda del tuo mve delle findvarianti, potrebbe essere necessario utilizzare find . -type f -exec mv -t . {} \;invece.
Daniel Beck

1
Per le porte Windows native di molti strumenti Unix mi piace unxutils.sourceforge.net
Dennis,

@Dennis UnxUtils è carino, sfortunatamente abbastanza vecchio ormai. Se li stai usando al momento, potresti verificare che il mio post funzioni con loro? mkdir -p a/a1 a/a2 a/a3 b/b1 b/b2 b/b3 ce touch a/a1/foo a/a1/bar a/a2/baz a/a3/qux b/b1/quux b/b2/quuux b/b3/quuuux c/cccper preparazione.
Daniel Beck

-1 Potrebbe essere vero, ma mi chiedevo come farlo in cmd.
Rook,

@Daniel Senza dubbio sono vecchi, li trascino da anni. Ho appena provato find . -type f -exec mv {} . ;e sembrava funzionare bene.
Dennis,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.