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)
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 336168
Url: https://administrator.de/contentid/336168
Ausgedruckt am: 05.11.2024 um 18:11 Uhr
4 Kommentare
Neuester Kommentar
Hi,
Sofern es nicht Batch sein muss, sondern möglicherweise auch Powershell reicht, würde folgender Code die Anforderung erfüllen
Aus meiner Sicht ist Powershell hier um einiges mächtiger und wartbarer als Batch.
Viele Grüße
SeriousEE
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
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.
Musterlösungen: Dateien verschieben in Abhängigkeit des Dateinamens !!
Gruß
(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 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!"
)