odermark
Goto Top

Batchdatei zum Auslesen eines Pfadnames

Hallo ich habe ien Problem. Ich ahbe viele PDF, die in verschiedne Ordner sollen. Im Namen der Datei steht an den ersten schs Stellen der Pfadname, wo die Datei hinsoll.

Hallo,

ich habe eine PDF-Datei mit folgender Namensstruktur: 078935141412010803.pdf.

die ersten sechs Ziffern sollen ausgelesen werden und dann soll die Datei in den Pfad mit derKennung 78935, also ohne führende Null, die sich im Ordner C:\\\\speicher\\\\ befindet verschoben werden.

Kann mir jemand helfen?

Vielen Dank
Kommentar vom Moderator Biber am 04.08.2010 um 20:42:04 Uhr
Originaltitel "Batchdatei zum Auslesen eines Pfanames" mit einem "d" wie in "Bradkardoffel" angereichert.

Content-Key: 148255

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

Ausgedruckt am: 28.03.2024 um 14:03 Uhr

Mitglied: Biber
Biber 03.08.2010 um 20:40:52 Uhr
Goto Top
Moin Odermark,

Kann mir jemand helfen?
Ich mag es eigentlich selbst gar nicht, wenn Fragen immer mit Gegenfragen beantwortet werden müssen.
Aber manchmal habe ich einfach keine Wahl

  • Du hast "viele viele bunte PDFs" in EINEM Ordner, in einer Verzeichnisstruktur, verteilt auf drei Wechselplatten??

Ich habe eine PDF-Datei mit folgender Namensstruktur: 078935141412010803.pdf.
... meine Kidz bekämen für so einen Satz im Pflichtenheft 2 Tage Disko-Verbot.

Die PDFs haben
  • alle einen 18stelligen Namen ausschliesslich aus Ziffern bestehend?
  • haben alle eine führende Ziffer "0"?
  • wenn nein: ergeben sich für die PDFs mit ohne führende "0" dann 6stellige Ordnernamen?
  • noch wenn nein: ergeben sich für die PDFs mit zwei führenden "0" dann 4stellige Ordnernamen?

Die Zielordner existieren? Müssen neu angelegt werden?

[Und optionale Frage, rein aus persönlichem Interesse:
WTF kommt jemand auf die Idee, diese PDF-Berge zu strukturieren erst nachdem sich Tausende angesammelt haben???
Haben die sich denn so sehr überraschend vermehrt jetzt seit der Mai ausgeschlagen hat?]

Grüße
Biber
Mitglied: Odermark
Odermark 03.08.2010 um 21:55:47 Uhr
Goto Top
Hallo Biber, Kritik ist angekommen. Ich versuche mich zu bessern.

Die PDFs haben

          • alle einen 18stelligen Namen ausschliesslich aus Ziffern bestehend.
          • haben nicht zwingend eine führende Ziffer "0".
          • Die Ordnernamen sind entweder 5- oder sechsstellig der kleinste Ordnername ist 10000 der größte hat die Nummer 999999. Die Ordner existieren bereits.
          • Die Dateien befinden sich allesamt in einem Ordner (K:/scan/) auf meinem Rechner. Sie werden aus einem Scanner-Kopierer zunächst in readable PDF abgespeichert und dann so in den Pfad K:/scan/ abgelegt. (pro Tag etwa 100 Stück).

(Zur Beantwortung der persönlichen Frage: Die Batchdatei soll in regelmäßigen Abständen diese PDF-Dateien in die Ordner 10000 bis 999999 verschieben. Der Dateiname ist mittels eines Barcodes als Dateiname eingelesen. Er sagt aus in den Stellen 1-6, welcher Ordner, in den Stellen sieben bis 10, welcher Inhalt und von 11-18 welches Eingangsdatum dieses Schreiben hat. Diese OCR-Erkennungssoftware hat keine Zusatzmodul, die das Scannen aus verschiedenen Ordnern zulässt.)

Viele Grüße

Odermark
Mitglied: Biber
Biber 03.08.2010 um 22:13:38 Uhr
Goto Top
Moin Odermark,

danke dir für die Antworten... so wird es ein bisschen einfacher als mit zu vielen Variablen.
Für heute wollte ich erst mal Schicht machen... aber wenigstens "Danke" sagen.

Wenn die Ordner existieren (was ich gehofft habe), dann lässt sich ja auch statt der Strategie

  • Wackele über alle 10000 Dateien, fass jeden gatesverdammten Dateinamen an, mach ein Substring-Geraffel zur Bildung des Ordnernamens, leg den Ordner an UND DANN ENDLICH FANG AN mit MOVEn...

...wie gesagt stattdessen lässt es sich so angehen

  • Über alle vorhandenen Ordner wackeln (sind weniger als 10000) und dann alle Dateien mit der Wildcard-Konvention "ordnername*.pdf" bzw "0ordnername*.pdf" jeweils ein ganzer Schwung verschieben..

Aber, wie geschrieben, morgen.... falls es dann noch offen ist.

Grüße
Biber
Mitglied: 77559
77559 03.08.2010 um 22:17:47 Uhr
Goto Top
Hallo Odermark,

das sollte es eigentlich tun
@Echo off
SetLocal 
Set "Basis=k:\Scan"  
Pushd "%Basis%"  
for %%A in (*.pdf) do Set "File=%%~nA" & Call :ProcessFile "%%~fA"  
Popd
Goto :Eof
:ProcessFile
Set /A "Ordner=1%File:~0,6% - 1000000"  
If Not Exist "%Ordner%" Echo Ordner %Ordner% nicht vorhanden & goto :Eof  
Echo Move %1 "%Ordner%\"  
Wenn die Ausgabe auf dem Bildschirm korrekt ersceint das echo in der letzten Zeile entfernen.
Wenn Fragen zu den genutzten Befehlen bestehen, raus damit.

Gruß
LotPings

Edit: übersehenes Base in Basis geändert.
fehlende Tilde in Zeile 9 ergänzt
Überflüssige %Basis% Referenzen entfernt
Mitglied: Odermark
Odermark 04.08.2010 um 15:53:06 Uhr
Goto Top
Hallo LotPings,

danke für die schnelle Antwort. Leider kann ich das Ergebnis nicht sehen, weil ich den Befehl nicht weiss, wie ich das Ergebnis auf dem Bildschimr einfrieren kann.

Ich habe folgende Umgebung:
K:\scan
in K:\scan befinden sich der Ordner K:\scan\78935

In K:\scan befindet sich die Datei 078935141412010803.pdf.

Wenn ich jetzt die bat laufen lasse passiert garnichts, ausser dass der Bildschirm kurz was anzeigt.
Liegt das daran, dass die bat nicht auf dem Server läuft, wo K: liegt, sondern auf einem Client. Im Client ist das Verzeichnis scan mit dem laufwerksbuchstaben K: gemappt.

Viele Grüsse

Odermark
Mitglied: pieh-ejdsch
pieh-ejdsch 04.08.2010 um 18:29:01 Uhr
Goto Top
Hi Odermark,

ersetze Zeile 11 mit
Echo Move %1 "%Basis%\%Ordner%\"  

Gruß Phil
Mitglied: Biber
Biber 04.08.2010 um 18:45:29 Uhr
Goto Top
Moin pieh-ejdsch,

du antwortest Odermark mit
Zitat von @pieh-ejdsch:
Hi Odermark,

ersetze Zeile 11 mit
Echo Move %1 "%Basis%\%Ordner%\"  

...auf seine Frage...
Zitat von @Odermark:
Leider kann ich das Ergebnis nicht sehen, weil ich den Befehl nicht weiss, wie ich das
Ergebnis auf dem Bildschimr einfrieren kann.

Darf ich mir diesen Dialog abheften für schlechte Zeiten?



@Odermark.
Okay, dann machen mir erstmal mit dem Plan B weiter... mit der Strategie, die ich dir eigentlich ersparen wollte.
[Viele Neu-Bätchlinge fangen oft haltlos an zu Lachen, wenn sie das erste Mal eine Batch-Substring-Ermittlung überreicht bekommen...]

Bitte als Erstes.
  • Öffne dir einen CMD-Prompt [Windows-Taste +"R" --> Eingabe "cmd" -->ENTER.
  • Starte den Batch durch Aufruf von "c:\schnipsel\meinErsterBatch" oder wie er genannt ist.

Und dann machen wir weiter.

Grüße
Biber
Mitglied: pieh-ejdsch
pieh-ejdsch 04.08.2010 um 19:01:22 Uhr
Goto Top
ich dachte eine Korrekte Zeile ist erstmal wichtiger äähhm mindestens genauso wichtig wie Deine Erläuterung.
sorry das ich die Fragestellung nicht beachtet habe.
Mitglied: Biber
Biber 04.08.2010 um 19:09:20 Uhr
Goto Top
Moin pieh-ejdsch,

*lach*
okay, okay, natürlich müssen wir oder Mark..äh...Odermark irgendwann mal diesen Tippfehler %Basis% statt %Base% rauspuhlen.

Es ging nur um die Reihenfolge.
Mit meiner stockkonservativen Methode würde er den Grund auf dem Bildschirm lesen können.
Mit der anderen (der Doppelklick-vom-Desktop-) Methode muss er immer erst ins Internet und auf Hinweise aus ganz Mitteleuropa hoffen.

Grüße
Biber
Mitglied: Odermark
Odermark 04.08.2010 um 19:29:01 Uhr
Goto Top
Hallo,
Danke! Es erscheint folgende fehlermeldung:

Ungültige Zahl. Nummerische Konstanten sind entweder dezimale (1/7), hexadezimale (0*11) oder oktale (021) Zahlen.

Move "..." Als Ergebnis gibt er "D:\OCR2\\"

Ich habe die Empfehlung von pieh-ejdsch aufgegriffen und Base durch Basis ersetzt.

Bei Verwendung von Base ist das Ergebnis "\\" Die Fehlermeldung ist dieselbe.

Beste Grüße.
Odermark
Mitglied: 77559
77559 04.08.2010 um 19:35:25 Uhr
Goto Top
Zitat von @Odermark:
Hallo,
Danke! Es erscheint folgende fehlermeldung:

Ungültige Zahl. Nummerische Konstanten sind entweder dezimale (1/7), hexadezimale (0*11) oder oktale (021) Zahlen.
Sorry in der Zeile 9 fehlte noch eine Tilde, ändere ich oben ab - dann sollte es gehen.

Gruß
LotPings
Mitglied: Odermark
Odermark 04.08.2010 um 19:39:24 Uhr
Goto Top
Hallo LotPings, Biber und PhD (ist mir zu lang)

Problem gelöst. Es funktioniert.

Vielen Dank! Ihr seid Spitze
Odermark
Mitglied: Biber
Biber 04.08.2010 um 20:37:18 Uhr
Goto Top
Moin Odermark,

nur als Nachtrag, weil mein gestern skizzierter Plan A ja noch nicht ausformuliert wurde.

Ich wollte ja möglichst ohne so eine Substring-Arie ausjommen, was auch geht wenn die Ordner schon existieren.

Liefe dann auf zwei bis drei Zeilen am CMD-Prompt raus in dem Szenario mit "K:\Scan\*viele*.pdf" und "K:\Scan\nnnnnn\"-Ordner:
mode con cols=155 lines=44
for %q in ("k:\Scan") do @for /d %i in (%~q\*) do @if exist "%~q\%~ni*.pdf" @move "%~q\%~ni*.*" "%i\"
for %q in ("k:\Scan") do @for /d %i in (%~q\*) do @if exist "%~q\0%~ni*.pdf" @move "%~q\0%~ni*.*" "%i\"

Aber auch bei diesen Onelinern hätte das Erklären genauso lange gedauert...
[Obwohl... wenn ich EINE Zeile draus gemacht hätte, dann noch länger...]

Grüße
Biber

P.S.
Warum denn LotPings' Schnipsel bei deinem-"K:\Scan"-Szenario so in die Grütze fasst
Move "..." Als Ergebnis gibt er "D:\OCR2\\"...
--> dieses Rätsel lassen wir mal auf sich beruhen...