Lo spostamento di un gran numero di file in una directory a più directory
-
23-09-2019 - |
Domanda
Sto cercando di creare uno script batch di Windows per spostare circa 2.000 file e dividendoli in modo che ci sono 10 file per cartella. Ho tentato di creare uno script batch, ma la sintassi davvero vacilla la mia mente. Ecco quello che ho finora
@echo off
:: Config parameters
set /a groupsize = 10
:: initial counter, everytime counter is 1, we create new folder
set /a n = 1
:: folder counter
set /a nf = 1
for %%f in (*.txt) do (
:: if counter is 1, create new folder
if %n% == 1 (
md folder%nf%
set /a n += 1
)
:: move file into folder
mv -Y %%f folder%nf%\%%f
:: reset counter if larger than group size
if %n% == %groupsize% (
set /a n = 1
) else (
set /a n += 1
)
)
pause
Fondamentalmente ciò che questo script non fa altro che scorrere ogni file txt nella directory. Si crea una nuova directory in principio e si muove 10 file in quella cartella, quindi crea una nuova cartella di nuovo e si muove altri 10 file in quella cartella, e così via. Tuttavia, sto avendo problemi in cui la variabile n
non viene incrementato nel ciclo? Sono sicuro che ci sono altri errori anche in quanto la finestra CMD si chiude su di me anche con pause
. Qualsiasi aiuto o consiglio è apprezzato, grazie per il vostro tempo!
Soluzione
Un paio di cose che dovete sapere:
- è necessaria
SETLOCAL ENABLEDELAYEDEXPANSION
, dal momento che si sta modificando le variabili e usando i loro valori modificati in un unico blocco di parentesi.SET /?
sulla riga di comando darà alcune informazioni. Cercare in internet per questo termine e troverete una spiegazione migliore. - I luoghi che utilizzano il formato
!nf!
per le variabili è legata alla espansione ritardata. - Come ghostdog74 menzionati, non eri incrementare
%nf%
. - I inizializzato
nf
a 0 invece di 1. In questo modo, il numero della cartella che si desidera spostare i file è lo stesso del numero di cartella appena creata. Nel codice, si crea FolderX, quindi incrementare X, e quindi provare a spostare il file X + 1. - Devi usare
MOVE
per spostare un file,MV
non è valido.
Questo file batch funziona ... ma assicuratevi di prova! Ho solo provato su una piccola quantità di file.
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
:: Config parameters
SET groupsize=10
:: initial counter, everytime counter is 1, we create new folder
SET n=1
:: folder counter
SET nf=0
FOR %%f IN (*.txt) DO (
:: if counter is 1, create new folder
IF !n!==1 (
SET /A nf+=1
MD folder!nf!
)
:: move file into folder
MOVE /Y "%%f" folder!nf!
:: reset counter if larger than group size
IF !n!==!groupsize! (
SET n=1
) ELSE (
SET /A n+=1
)
)
ENDLOCAL
PAUSE
Altri suggerimenti
non si sta incrementando %nf%
.