Batch-Skript zum Verschieben mehrerer PDF-Dateien basierend auf dem ersten Wort in Ordner, die alle das gleiche erste Wort haben und sich im selben Verzeichnis befinden

Batch-Skript zum Verschieben mehrerer PDF-Dateien basierend auf dem ersten Wort in Ordner, die alle das gleiche erste Wort haben und sich im selben Verzeichnis befinden

Ich habe jede Menge Dateien in einem einzigen Verzeichnis gespeichert, die ich basierend auf dem Anfangsbuchstaben ihrer Dateinamen in Unterordner sortieren möchte.

Ich habe also Tausende von PDF-Dateien, die alle unterschiedliche erste Wörter (7 numerische Zeichen) haben.

Ich habe auch Tausende von Ordnern, die unterschiedliche erste Wörter und 7 numerische Zeichen im selben Verzeichnis haben.

Ich versuche, alle PDFs in Ordner zu verschieben, deren erstes Wort (7 Zeichen) dasselbe ist.

Ich brauche also eine Batchdatei, die im Wesentlichen eine PDF-Datei überprüft und im selben Verzeichnis prüft, ob bereits ein Ordner mit denselben ersten 7 numerischen Zeichen vorhanden ist, und wenn dies der Fall ist, die PDF-Datei in diesen Ordner verschiebt.

Wenn für die PDF-Datei kein Ordner vorhanden ist, wird ein Ordner basierend auf den ersten sieben Zeichen der PDF-Datei erstellt.

Ich habe beispielsweise eine PDF-Datei mit dem Namen „1617832_XXXXXXXX_XXX.pdf“ und einen Ordner mit dem Namen „1617832_XXXXXXXX“ im selben Verzeichnis. Ich möchte, dass „1617832_XXXXXXXX_***.pdf“ in den vorhandenen Ordner „1617832_XXXXXXXX“ verschoben wird. Wenn der Ordner „1617832_XXXXXXXX“ jedoch nicht vorhanden ist, möchte ich einen Ordner mit dem Titel „1617832“ (die ersten sieben Zeichen der Datei) erstellen.

Anschließend fährt es mit der nächsten PDF-Datei „4530834__XXXXXXXX_XXX.pdf“ fort und prüft die Ordner, um festzustellen, ob es einen passenden Ordner mit demselben ersten Wort (sieben Zeichen) gibt. Anschließend verschiebt es die Datei in diesen Ordner (falls er existiert, andernfalls wird ein neuer Ordner erstellt).

Der einzige Batch, der dem nahe kommt, dessen Ausführung aber zu lange dauert und keine Ordner erstellt, wenn sie nicht vorhanden sind, ist dieser:

@echo on
setlocal enabledelayedexpansion
cls

pushd c:\folders\

for /f "tokens=*" %%1 in ('dir /a-d /b *') do (
set filename=%%1&set dirname=!filename:~0,7!

for /f "tokens=*" %%A in ('dir /ad /b') do (
    set dirid=%%A&set dirid=!dirid:~0,7!

if "!dirid!" equ "!dirname!" move %%1 %%A
  )        
)

Gibt es eine Möglichkeit, dies effizienter und effektiver zu tun?

Antwort1

Testen Sie Folgendes:

@echo off
setlocal EnableDelayedExpansion

REM Put here the path where the PDFs are:
set "Source=%userprofile%\Desktop\test"

for %%a in ("%Source%\*.PDF") do (
set "File=%%~na"
for /d %%b in ("%Source%\*") do (
set "Folder=%%~nb"
If "!File:~0,7!"=="!Folder:~0,7!" Move "%%a" "%%b"
)
if Exist "%%a" md "!Source!\!File:~0,7!"& move /y "%%a" "!Source!\!File:~0,7!"
)

Bildbeschreibung hier eingeben

Antwort2

  • Aktualisiertunter Berücksichtigung dieses Kommentars:Ja, wenn zwei Ordner die gleichen ersten 7 Zeichen haben, möchte ich, dass die Datei in beide Ordner verschoben wird, die die gleichen ersten 7 Zeichen haben

Sie können den Verschiebebefehl nicht verwenden, da es durch das Verschieben unmöglich wird, nach dem Verschieben eine weitere Kopie der (verschobenen Datei) in einem anderen Ordner zu erstellen, bei dem die ersten 7 Zeichen übereinstimmen ... Der Befehl müsste Kopien erstellen, nicht Dateien verschieben ...


@echo off && setlocal enabledelayedexpansion 

cd /d "O:\Path\Operations\Blank\Blanky\Blank Blank" && cls 

for /f tokens^=* %%i in ('dir /a:d .\* /b ')do set "_folder=%%~ni" && if exist ".\%%~ni*.pdf" (
for /f tokens^=* %%F in ('dir /a:d /b ".\!_folder:~0,7!*"')do copy ".\%%~ni*.pdf" "%%~dpnF\." )

for %%F in (*.pdf)do set "_file=%%~nF" && call set "_file=!_file:~0,7!" && (
if not exist .\!_file!\. md .\!_file!\ && copy /y "%%~dpnxF" ".\!_file!\." )

:: Deleting these files was copied to multiple folders instead of being moved to folder...
(echo/ if exist .\*.pdf del .\*.pdf /q /f ) & %__APPDIR__%timeout.exe -1 & endlocal && goto :EOF

Behandeln Sie zuerst den Ordner und prüfen Sie, ob Dateien übereinstimmen. Überprüfen Sie anschließend die verbleibenden Dateien im Ordner und ohne Ziel


Wenn alle Dateien in den entsprechenden Ordner kopiert wurden, müssen Sie diesen löschen: Entfernen Sie dazu einfach dieecho /Befehl:


(Echo/falls vorhanden .\*.pdf del .\*.pdf /q /f ) & %__APPDIR__%timeout.exe -1 & endlocal && goto :EOF

verwandte Informationen