Lo spostamento di un gran numero di file in una directory a più directory

StackOverflow https://stackoverflow.com/questions/2541887

  •  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!

È stato utile?

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%.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top