ucdsr2019
Goto Top

Im Batch einen Unterordner bzw. Pfad ändern

Hallo, ich habe eine Batch - diese nennt pdfs nach Inhalt um - diese batch muss zurzeit mit den pdfs in einem Ordner liegen, ich hätte aber es gerne anders - es sollen die pdfs in einem Unterordner liegen. Ich habe in der batch dies schon versucht umzustellen, leider erfolglos - vielleicht kann mir jemand helfen.

Es sind 3 batches


Lief.bat
LiefoLeer.bat
Lieferscheine-umbenennen_START.bat

die pdfs sollen in einem Unterordner "pdfs" liegen


Lief.bat
@Echo off & setlocal
For /f "Delims=" %%A in ('Dir /B /A-D "pdfs\DOC*.pdf"') Do Call :ProcPDF "%%A" "%%~nA.txt"  
Goto :Eof

:ProcPDF
pdftotext.exe %1
If defined Nummer set "Lieferschein-Nr."  
for /f "Tokens=2" %%B in ( 'findstr /I "Lieferschein-Nr." %2 ' ) Do Call :Trim Nummer %%B  
If Not Defined Nummer Echo Keine Nummer in %1 & goto :EOF
Ren %1 "%Nummer%.pdf"  
Del %2 /Q 2>NUL
echo Lieferscheine %Nummer% %1 mit Leerzeichen fertig
Goto :Eof 

:Trim 
Set "%1=%2"   
Goto :Eof

LiefoLeer.bat
@Echo off & setlocal
For /f "Delims=" %%A in ('Dir /B /A-D "pdfs\DOC*.pdf"') Do Call :ProcPDF "%%A" "%%~nA.txt"  
Goto :Eof

:ProcPDF
pdftotext.exe %1
set "Zeile="  
for /f "delims=" %%B in ( 'findstr "Lieferschein-Nr.[0-9][0-9][0-9][0-9][0-9][0-9][0-9]" %2 ' ) Do set "Zeile=%%B"  
If Not Defined Zeile Echo Keine Lieferschein-Nr. in %1 & goto :EOF
set "KNr="  
for /f "tokens=1" %%B in ("%Zeile:*Lieferschein-Nr.=%") do set "KNr=%%B"  
If Not Defined KNr Echo Keine Lieferschein-Nr. in %1 & goto :EOF
Ren %1 "%KNr%.pdf"  
Del %2 /Q 2>NUL
@echo Lieferscheine %KNr% ohne Leerzeichen fertig
Goto :Eof 

:Trim 
Set "%1=%2"   
Goto :Eof
pause

Lieferscheine-umbenennen_START.bat
@ECho off
Set Log=log.Log
>>%Log% Echo "-------------------------------" %date% %time% User: %username%  

call "LiefoLeer.bat">>%Log%  
call "Lief.bat">>%Log%  


vielen Dank!

Content-Key: 540196

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

Ausgedruckt am: 28.03.2024 um 14:03 Uhr

Mitglied: TK1987
TK1987 28.01.2020 aktualisiert um 07:44:54 Uhr
Goto Top
Moin,

Zitat von @ucdsr2019:
Ich habe in der batch dies schon versucht umzustellen, leider erfolglos
Eine Dir-Ausgabe enthält nur bei rekursiver Ausführung den vollen Dateipfad. Nutzt du den Schalter "/s" also nicht, musst du den Pfad manuell angeben.
Daraus ergeben sich für dich 3 Möglichkeiten:

  • Möglichkeit 1: Dir rekursiv ausführen
Ist natürlich nur empfehlenswert, sofern keine oder nur wenige Unterordner mit Dateien existieren; und sofern keine Dateien mit selbem Namensschema in Unterordnern existieren.
Beim Callen musst du dem 2. Argument den Pfad dann auch mitgeben.
For /f "Delims=" %%A in ('Dir /S /B /A-D "C:\Pfad\zu\pdfs\DOC*.pdf"') Do Call :ProcPDF "%%A" "%%~dpnA.txt"  
...

  • Möglichkeit 2: Den Dateipfad manuell mitgeben
set Pfad=C:\Pfad\zu\pdfs
For /f "Delims=" %%A in ('Dir /B /A-D "%Pfad%\DOC*.pdf"') Do Call :ProcPDF "%Pfad%\%%A" "%Pfad%\%%~nA.txt"  
...

  • Möglichkeit 3: Vorher in das Arbeitsverzeichnis wechseln
Macht natürlich nur Sinn, wenn alle Dateien im gleichen Ordner liegen.
cd /d "C:\Pfad\zu\pdfs"  
For /f "Delims=" %%A in ('Dir /B /A-D DOC*.pdf"') Do Call :ProcPDF "%%A" "%%~nA.txt"  
...

Gruß TK1987