diddy0815
Goto Top

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

Content-Key: 538135

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

Printed on: April 16, 2024 at 06:04 o'clock

Member: Kraemer
Kraemer Jan 22, 2020 at 18:00:18 (UTC)
Goto Top
Moin,

warum soll so etwas in VBA umgesetzt werden?

Gruß
Member: Diddy0815
Diddy0815 Jan 22, 2020 at 18:20:17 (UTC)
Goto Top
Hallo, muss nicht.

LG
Member: TK1987
Solution TK1987 Jan 22, 2020, updated at Jan 23, 2020 at 00:15:43 (UTC)
Goto Top
Moin,

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
Member: Diddy0815
Diddy0815 Jan 23, 2020 at 06:58:21 (UTC)
Goto Top
Guten Morgen,

danke für die Lösung. Leider stimmt hier noch etwas nicht. Da ich mir gedacht habe das es vielleicht hier ein Rechte Problem gibt habe ich die Powershell Variante auf D: umgeschrieben:


$Quelle='D:\PDF\Arbeitsscheine.txt'  
cat $Quelle | ? {Test-Path "D:\PDF\$_.PDF"} | % {  
    write-host -NoNewline "D:\PDF\$_.PDF --> D:\PDF_2\$($_)_b.PDF... "  
    move -force "D:\PDF\$_.PDF" "D:\PDF_2\$($_)_b.PDF" 2>$NULL  
    if ($?) {write-host -f green "erfolgreich."} else {write-host -f red "Fehler."}  
    }
cmd /c pause

Beim Aufführen kommt folgende "Meldung"

D:\PDF\509156.PDF --> D:\PDF_2\509156_b.PDF... Fehler.
D:\PDF\509209.PDF --> D:\PDF_2\509209_b.PDF... Fehler.

Es ist nicht umbenannt und verschoben.

LG

Gerald
Mitglied: 142232
142232 Jan 23, 2020 updated at 07:48:22 (UTC)
Goto Top
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.
move-item -LiteralPath "D:\PDF\$_.PDF" -Destination "D:\PDF_2\$($_)_b.PDF" -Force  
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.
Member: Diddy0815
Diddy0815 Jan 23, 2020 at 08:12:56 (UTC)
Goto Top
Hallo,

habe die Zeile ausgetauscht. Folgender Fehler kommt: move-item : Ein Teil des Pfads konnte nicht gefunden werden.

Kurze Spekulation:
Kann es sein, das die Pdfs im Code von TK1987 nur ermittelt und nicht umbenannt werden und daher nicht verschoben werden?

Ich habe keine Ahnung von Codes, aber das würde erklären warum die Datei mi txxx_b.pdf nicht gefunden wird

LG

Gerald
Mitglied: 142232
Solution 142232 Jan 23, 2020 updated at 09:23:37 (UTC)
Goto Top
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  
}
Member: Diddy0815
Diddy0815 Jan 23, 2020 at 10:44:39 (UTC)
Goto Top
Hallo,

oft sind es die kleinen (peinlichen) Dinge. Ich hatte irrtümlich das Zielverzeichnis bei mir auf PDF2 und nicht PDF_2 wie in der eigenen Angabe.

Peinlich, peinlich, peinlich.

Vielen Dank funktioniert alles wunderbar!

Danke an alle!


LG

Gerald