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-ID: 538135

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

Ausgedruckt am: 24.11.2024 um 05:11 Uhr

Kraemer
Kraemer 22.01.2020 um 19:00:18 Uhr
Goto Top
Moin,

warum soll so etwas in VBA umgesetzt werden?

Gruß
Diddy0815
Diddy0815 22.01.2020 um 19:20:17 Uhr
Goto Top
Hallo, muss nicht.

LG
TK1987
Lösung TK1987 22.01.2020, aktualisiert am 23.01.2020 um 01:15:43 Uhr
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
Diddy0815
Diddy0815 23.01.2020 um 07:58:21 Uhr
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
142232
142232 23.01.2020 aktualisiert um 08:48:22 Uhr
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.
Diddy0815
Diddy0815 23.01.2020 um 09:12:56 Uhr
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
142232
Lösung 142232 23.01.2020 aktualisiert um 10:23:37 Uhr
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  
}
Diddy0815
Diddy0815 23.01.2020 um 11:44:39 Uhr
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