Pdfs in eine Ordner nur umbenennen, wenn in einer Liste vorhanden
Hallo zusammen,
ich habe schon einige Lösungen Versuch zum Nachbauen, aber keine passt so richtig nicht zu meinem "Problem"
Problem:
Im Verzeichnis: C:\PDF liegen mehrere pdf nach dem Schema 6-stellige Belegnummer.pdf (123456.pdf)
Ich habe eine txt. Datei (Arbeitsscheine.txt) mit Belegnummern die unbenannt werden sollen, auf Belegnummer_b.pdf (123456_b.pdf)
Danach sollen diese in das Verzeichnis C:\PDF_2 verschoben werden.
Es sollen nur die Dateien unbenannt und verschoben werden, die in der Liste stehen.
Könnt Ihr mir bitte Helfen
LG
Gerald
ich habe schon einige Lösungen Versuch zum Nachbauen, aber keine passt so richtig nicht zu meinem "Problem"
Problem:
Im Verzeichnis: C:\PDF liegen mehrere pdf nach dem Schema 6-stellige Belegnummer.pdf (123456.pdf)
Ich habe eine txt. Datei (Arbeitsscheine.txt) mit Belegnummern die unbenannt werden sollen, auf Belegnummer_b.pdf (123456_b.pdf)
Danach sollen diese in das Verzeichnis C:\PDF_2 verschoben werden.
Es sollen nur die Dateien unbenannt und verschoben werden, die in der Liste stehen.
Könnt Ihr mir bitte Helfen
LG
Gerald
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 538135
Url: https://administrator.de/forum/pdfs-in-eine-ordner-nur-umbenennen-wenn-in-einer-liste-vorhanden-538135.html
Ausgedruckt am: 25.12.2024 um 14:12 Uhr
8 Kommentare
Neuester Kommentar
Moin,
entweder als Batch:
oder Powershell:
Gruß TK1987
entweder als Batch:
@echo off
set Quelle="C:\PDF\Arbeitsscheine.txt"
for /f "usebackq" %%A in (%Quelle%) do if exist "C:\PDF\%%A.PDF" (
echo.|set /p ="C:\PDF\%%A.PDF --> C:\PDF_2\%%A_b.PDF... "
move "C:\PDF\%%A.PDF" "C:\PDF_2\%%A_b.PDF" 2>nul && echo erfolgreich.||echo Fehler.
)
pause
oder Powershell:
$Quelle='C:\PDF\Arbeitsscheine.txt'
cat $Quelle | ? {Test-Path "C:\PDF\$_.PDF"} | % {
write-host -NoNewline "C:\PDF\$_.PDF --> C:\PDF_2\$($_)_b.PDF... "
move -force "C:\PDF\$_.PDF" "C:\PDF_2\$($_)_b.PDF" 2>$NULL
if ($?) {write-host -f green "erfolgreich."} else {write-host -f red "Fehler."}
}
cmd /c pause
Gruß TK1987
Die Reihenfolge der Parameter in Zeile 4 sind nicht korrekt wenn man sie ohne "Named" Parameter angibt.
Außerdem werden die Fehler dort mit 2>$null ins Nirvana geschickt deswegen siehst du keine vernünftige Fehlermeldung.
Wenn man die Parameternamen nicht mit angibt muss der Quellpfad an Parameter-Position 0 und Zielpfad an Parameter Position 1 stehen.
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...
Der besseren Verständlichkeit halber für Powershell Anfänger sollte man sie aber wenn möglich ausschreiben.
-LiteralPath ist zusätzlich sicherer wenn man nicht möchte das Sonderzeichen wie * oder zu einer erweiterten Wildcardauflösung führen könnten.
Außerdem werden die Fehler dort mit 2>$null ins Nirvana geschickt deswegen siehst du keine vernünftige Fehlermeldung.
move-item -LiteralPath "D:\PDF\$_.PDF" -Destination "D:\PDF_2\$($_)_b.PDF" -Force
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...
Der besseren Verständlichkeit halber für Powershell Anfänger sollte man sie aber wenn möglich ausschreiben.
-LiteralPath ist zusätzlich sicherer wenn man nicht möchte das Sonderzeichen wie * oder zu einer erweiterten Wildcardauflösung führen könnten.
Wenn der Zielordner noch nicht existiert musst du ihn natürlich vorher erstellen, oder es eben im Code abfragen und einbauen.
$Quelle='C:\PDF\Arbeitsscheine.txt'
$ziel = 'D:\PDF_2'
if (!(Test-Path $ziel)){md $ziel -Force | out-null}
gc $Quelle | ?{Test-Path "C:\PDF\$_.PDF"} | %{
move-item -LiteralPath "D:\PDF\$_.PDF" -Destination "$ziel\$($_)_b.PDF" -Force -Verbose
}