Sposta i file in una cartella in base al loro nome


1

Ho diversi file .pdf e .jpg che devo spostare.

Si chiamano in questo modo

002-054*.pdf
042-021*.pdf

* essendo qualche appisso.

Ora voglio spostare questi file in cartelle come questa

002\002 - 054\002-054*.pdf
042\042 - 021\042-021*.pdf

Alcune cartelle esistono già, ma in questo schema di denominazione 002\002 - 054 Some Name\

Voglio solo creare le cartelle come indicato nello snippet del 2 ° codice, quando non esistono già. Se esistono già, voglio solo spostare i file nella cartella corrispondente.

Attraverso alcuni google ho potuto mettere insieme qualcosa

@echo off
for %%F in (*.pdf *.jpg) do call :subr "%%F"
exit /b

:subr
set filename=%1
move %1 %filename:~1,3%\%filename:~1,7%\
exit /b

Ma questo non considera le cartelle già esistenti. Quale sarebbe il modo migliore per farlo?

Risposte:


2

Devi semplicemente aggiungere un paio di righe alla subroutine: -

:subr
set filename=%1
Rem Check for existence of directories in target path
if not exist %filename:~1,3% md %filename:~1,3%
if not exist %filename:~1,3%\%filename:~1,7% md %filename:~1,3%\%filename:~1,7%
Rem Now the move can proceed
move %1 %filename:~1,3%\%filename:~1,7%\
exit /b

Ciò non funzionerà se esiste un file esistente con lo stesso nome di uno dei percorsi di directory che è necessario creare. Dovrai decidere come gestire questo caso, ad esempio aggiungendo un'estensione al nome o spostando il file in un'altra posizione.


0

A condizione che la cartella debba essere creata nella directory corrente
e la cartella di 2 ° livello abbia -tra i numeri:

@echo off
for /f "delims=" %%F in (
  'Dir /b *.pdf *.jpg^|findstr "^[0-9][0-9][0-9]-[0-9][0-9][0-9]" '
) do call :subr "%%F"
exit /b

:subr
set "file=%~n1"
set "fold=%file:~0,3%\%file:~0,3% - %file:~4,3%\"
if not exist "%fold%" md "%fold%"
move %1 "%fold%"

I file cambiati per e dir |findstrdevono essere elaborati solo i file che iniziano con il modello numerico 999-999.
Poiché md crea cartelle intermedie è necessario solo un md.


Cosa succede se si desidera controllare il nome delle cartelle con un carattere jolly? Lo scriverei cosìif not exist "%fold%"* md "%fold%"
Claypenguin il

Il commento è stato in qualche modo interrotto, non mi è chiaro cosa stai chiedendo.
LotPings
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.