f0rcehunter
Goto Top

Batch Datei: PDF Dateien verschieben, umbenennen und löschen

Hallo zusammen,

ich versuche mich gerade an einer Batch, die folgende Arbeitsschritte durchführen soll:

In dem Ordner "C:\Produktdaten_zur_Uebernahme" befinden sich PDF Dateien. Jede PDF Datei hat eine 6 Stellige Nummer vorweg. Es soll nun pro unterschiedlicher PDF Datei (Unterscheidung anhand der Nummer) ein Ordner erstellt werden, der so heißt wie die ersten sechs Stellen der PDF Datei. In diesen Ordner soll dann die entsprechende Datei kopiert werden (Falls es mehrere mit der gleichen Nummer gibt, dann diese ebenfalls). Erstellt werden sollen diese Ordner unter dem Pfad "C:\Produktdaten_sammeln". Im Anschluss soll die Quell PDF gelöscht werden. Könnte also auch direkt mit move gemacht werden.

Im Moment sieht mein Batch Code so aus: (Ich bin leider ein absoluter Anfänger in diesem Thema)

@ECHO OFF

REM Setzen der Variablen Quelle und Ziel

SET Quelle=L:\Produktdaten_zur_Uebernahme\*.pdf
SET Ziel=L:\Produktdaten_sammeln\

REM Aktivieren der Delayed Expansion

SETLOCAL ENABLEDELAYEDEXPANSION

FOR "usebackq tokens=*" %%i IN (%Quelle%) DO (  

	REM Kopieren der ersten 6 Zeichen eines PDFs
	set "Nummer=%Quelle%:~,6%"  

	REM Setzen der Variablen zur Ordner Benennung
	set NeuerOrdner=%Nummer%

	REM Erstellen eines Ordners mit Benennung durch Variable NeuerOrdner
	mkdir "%Ziel%\%NeuerOrdner%"  

	REM Verschiebung der PDF Datei in den neuen Ordner
	move %Quelle% %Ziel%
	)

Wenn ich den Code ausführe passiert nichts. Gehe ich das Thema Schrittweise an, dann schaffe ich das Kopieren von Dateien und das Erschaffen neuer Ordner. Nicht aber die ersten 6 Zeichen einer PDF zu kopieren und diese als Ordnernamen zu verwenden.

Woran es ebenfalls scheitert ist die FOR Schleife. Sobald ich die funktionierenden Teile des Kopiervorgangs und der Ordnererstellung in die FOR Schleife bringe, funktionieren diese nicht mehr.

Ich hoffe Ihr könnt mir helfen meinen Code zu vervollständigen.

Vielen Dank und Gruß

F0rcehunter

Content-ID: 336168

Url: https://administrator.de/contentid/336168

Ausgedruckt am: 05.11.2024 um 18:11 Uhr

SeriousEE
Lösung SeriousEE 26.04.2017 aktualisiert um 15:33:42 Uhr
Goto Top
Hi,

Sofern es nicht Batch sein muss, sondern möglicherweise auch Powershell reicht, würde folgender Code die Anforderung erfüllen
$folder =  "L:\Produktdaten_zur_Uebernahme"  
$dest_folder =  "L:\Produktdaten_sammeln"  
$files = gci $folder *.pdf
foreach ($file in $files) {
   $name = $file.Name
   $foldername = $name.substring(0,6)
   if ( ! (Test-Path $dest_folder\$foldername )) {
      New-Item -ItemType directory -Path $dest_folder\$foldername
   }
   Move-Item $file.FullName $dest_folder\$foldername
}

Aus meiner Sicht ist Powershell hier um einiges mächtiger und wartbarer als Batch.

Viele Grüße
SeriousEE
132895
Lösung 132895 26.04.2017 aktualisiert um 17:38:18 Uhr
Goto Top
Du setzt "delayed expansion" nutzt es aber in der Schleife nicht, und mit der falschen Variable, und noch andere schlimme Fehler z.B. eine Kombination von Optionen einer /F Schleife mit einer normalen Schleife.

(Ich bin leider ein absoluter Anfänger in diesem Thema)
Die Frage kommt hier jede Woche zwei drei mal deshalb deswegen erst mal hier lesen und verstehen face-wink
Musterlösungen: Dateien verschieben in Abhängigkeit des Dateinamens !!

@echo off &setlocal enabledelayedexpansion
SET "Quelle=L:\Produktdaten_zur_Uebernahme\*.pdf"  
SET "Ziel=L:\Produktdaten_sammeln"  

FOR %%i IN ("%Quelle%") DO (  
	set "name=%%~ni"  
	set "newfolder=%ziel%\!name:~0,6!"  
	if not exist "!newfolder!" md "!newfolder!" >nul  
	move "%%i" "!newfolder!"  
)
Gruß
F0rcehunter
F0rcehunter 27.04.2017 um 08:24:26 Uhr
Goto Top
Hi, ich nehme deine Lösung mal als Anstoß mich mehr mit PowerShell zu beschäftigen. Es ist einfach wesentlich mächtiger als Batch - wie du schon sagtest. Ich bedanke mich herzlich für deine Lösung! Funktioniert einwandfrei!

Gruß

F0rcehunter
F0rcehunter
F0rcehunter 27.04.2017 um 08:26:12 Uhr
Goto Top
@rooobert

Besten Dank für die schnelle Antwort und Lösung! Funktioniert alles so wie es soll! Die Vorgehensweise ist eine ganz andere - manchmal steht man sich auch einfach selbst im Weg.

Danke und Gruß!