Anführungszeichen, Schräger etc. aus String entfernen zum Umbenennen einer Datei
Da der eigentlichen Thread ein "wenig" unübersichtlich wurde, hier die Fortsetzung.
Hallo,
in diesem Thread wurde mein Problem schon soweit gelöst. String aus PDF Datei als Dateinamenszusatz für eben diese PDF Datei
Die neue Frage noch einmal:
Im Prinzip funktioniert es auch schon ganz gut, ich habe jetzt nur noch Probleme mit Zeichen die nicht in Dateinamen vorkommen dürfen. Insbesondere """ und "/" werden gerne verwendet.
Dazu habe ich, natürlich, hier auch gesucht und auch eine Lösung gefunden. Nur die Umsetzung ist mehr als unschön.
Es betrifft folgenden Teil der Batch:
in der Zeile steht dann soetwas wie:
Am Ende der Batch wird aus diversen Variablen der Dateiname zusammen gesetzt. Kommt in "var" nun ein """ oder "/" vor knallt es natürlich.
"Meine Lösung" (ist natürlich hier aus dem Forum kopiert) sieht so aus:
mit diesem Part rufe ich also eine weitere Batch auf:
und damit noch eine:
das ganze funktioniert zwar, erscheint mir aber sehr sehr unschön.
Wie bekomme ich die Zeile "echo !line:"=!" direkt auf eine Variable? Oder, wie kann ich ""/\&" sonst aus der Variable "var" rauswerfen?
Ich hänge hier noch einmal die gesamte Batch an, die wichtigsten Schritte sind jetzt kommentiert:
Ich hoffe das kann man so jetzt besser lesen.
Wie gesagt, es "funktioniert", sieht aber echt nicht mehr schön aus.
Grüße aus dem total verregneten Münster
Hallo,
in diesem Thread wurde mein Problem schon soweit gelöst. String aus PDF Datei als Dateinamenszusatz für eben diese PDF Datei
Die neue Frage noch einmal:
Im Prinzip funktioniert es auch schon ganz gut, ich habe jetzt nur noch Probleme mit Zeichen die nicht in Dateinamen vorkommen dürfen. Insbesondere """ und "/" werden gerne verwendet.
Dazu habe ich, natürlich, hier auch gesucht und auch eine Lösung gefunden. Nur die Umsetzung ist mehr als unschön.
Es betrifft folgenden Teil der Batch:
for /f "tokens=1,2* delims=," %%i in ('type "%~1.txt" ^|findstr "1ST"') do set "var=%%i"
set "var=!var:~18,-1!"
in der Zeile steht dann soetwas wie:
bringe bitte die Bananen in Raum "D" / "C"
Am Ende der Batch wird aus diversen Variablen der Dateiname zusammen gesetzt. Kommt in "var" nun ein """ oder "/" vor knallt es natürlich.
"Meine Lösung" (ist natürlich hier aus dem Forum kopiert) sieht so aus:
if not exist "%~1.txt" echo Fehler bei Datei %~1 >> "Aufträge.log"
for /f "tokens=1,2* delims=," %%i in ('type "%~1.txt" ^|findstr "1ST"') do set "var=%%i"
set "var=!var:~18,-1!"
echo %var%
call b.cmd %var%>kopie.txt
echo call Ende
pause
for /f "tokens=* delims=," %%i in ('type "kopie1.txt" ') do set "var=%%i"
echo %var%
pause
if exist kopie.txt del kopie.txt
mit diesem Part rufe ich also eine weitere Batch auf:
@ECHO OFF
setlocal enabledelayedexpansion
rem echo b.cmd %datei%
for /f "delims=" %%i in ("%var%") do (
set "line=%%i"
echo !line:/=!
)
call c.cmd>kopie1.txt
goto :EOF
:EOF
und damit noch eine:
@ECHO OFF
setlocal enabledelayedexpansion
for /f "tokens=* delims=," %%i in ('type "kopie.txt" ') do set "var=%%i"
for /f "delims=" %%i in ("%var%") do (
set "line=%%i"
echo !line:"=!
)
goto :EOF
:EOF
das ganze funktioniert zwar, erscheint mir aber sehr sehr unschön.
Wie bekomme ich die Zeile "echo !line:"=!" direkt auf eine Variable? Oder, wie kann ich ""/\&" sonst aus der Variable "var" rauswerfen?
Ich hänge hier noch einmal die gesamte Batch an, die wichtigsten Schritte sind jetzt kommentiert:
@echo off
setlocal enabledelayedexpansion
set "Dateiname=0"
@chcp 1252
cd /d "C:\Users\Public\Documents\Aufträge"
for /f "delims=" %%a in ('dir /b PO*.pdf') do call :processlines "%%~na"
goto :eof
REM DATEINAME EINLESEN
:processlines
set Dateiname=%~1
echo %Dateiname% >> "Aufträge.log"
for /f "tokens=3,4,5 delims= " %%a in ("%Dateiname%") do set "Datei"="%%a %%b %%c"
REM PDF IN TEXT WANDELN
C:\script\pdf2txt\pdftotext.exe -layout "%~1.pdf"
REM AUFTRAGSBESCHREIBUNG KOPIEREN
if not exist "%~1.txt" echo Fehler bei Datei %~1 >> "Aufträge.log"
for /f "tokens=1,2* delims=," %%i in ('type "%~1.txt" ^|findstr "1ST"') do set "var=%%i"
set "var=!var:~18,-1!"
REM BASTELEI FÜR SONDERZEICHEN
call b.cmd %var%>kopie.txt
echo call Ende
for /f "tokens=* delims=," %%i in ('type "kopie1.txt" ') do set "var=%%i"
echo %var%
pause
if exist kopie.txt del kopie.txt
if exist kopie1.txt del kopie1.txt
REM LEERZEICHEN ELIMINIEREN IN AUFTRAGSBESCHREIBUNG
:loop1
rem echo !var!
if "%var:~0,1%"==" " set "var=%var:~1%" & goto :loop1
:loop2
if "%var:~-1%"==" " set "var=%var:~0,-1%" & goto :loop2
rem echo Nachher: #%var%#
REM AUFTRAGSGEBER HERRAUSFINDEN UND KOPIEREN
for /f "tokens=2 delims=:+" %%i in ('type "%~1.txt" ^|findstr "standhaltung:"') do set "nam=%%i"
set "nam=!nam:~0,-1!"
REM LEERZEICHEN ELIMINIEREN IN NAME AUFTRAGSGEBER
:loop11
rem echo !nam!
if "%nam:~0,1%"==" " set "nam=%nam:~1%" & goto :loop11
:loop21
if "%nam:~-1%"==" " set "nam=%nam:~0,-1%" & goto :loop21
rem echo Nachher: %nam%
REM DAS GANZE ZUSAMMENFÜHREN UND DIE DATEI UMBENAMSEN
for /f "Tokens=2,4" %%a in ('type "%~1.txt" ^|findstr "Auftragsnummer"') do (
set "Name=%%a %%b !var! %Datei% %nam%.pdf"
echo !Name!
echo !Name! >> "Aufträge.log"
set "Name=%%a %%b !var! %Datei% %nam%.pdf"
if exist !Name! echo Datei schon vorhanden !Name!>> "Aufträge.log"
ren "%~1.pdf" "!Name!"
del "%Dateiname%.txt"
)
:eof
Ich hoffe das kann man so jetzt besser lesen.
Wie gesagt, es "funktioniert", sieht aber echt nicht mehr schön aus.
Grüße aus dem total verregneten Münster
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 174552
Url: https://administrator.de/forum/anfuehrungszeichen-schraeger-etc-aus-string-entfernen-zum-umbenennen-einer-datei-174552.html
Ausgedruckt am: 23.12.2024 um 17:12 Uhr
4 Kommentare
Neuester Kommentar
Hallo don.redhorse,
zum einfachen entfernen von Sonderzeichen a'la <>&|": kann man einfach die ersetzung verwenden
Entfernt einfach diese Zeichen aus filename
jeb
zum einfachen entfernen von Sonderzeichen a'la <>&|": kann man einfach die ersetzung verwenden
setlocal EnableDelayedExpansion
set "filename=!filename:&=!"
set "filename=!filename:<=!"
set "filename=!filename:>=!"
set "filename=!filename:|=!"
set "filename=!filename:"=!"
set "filename=!filename::=!"
echo !filename!
Entfernt einfach diese Zeichen aus filename
jeb
moin don.redhorse,
wenn in Deinen Dateinamen fehlende Ausrufezeichen keine Rolle spielen und Du von Beginn an in Deinem Batch
Bis zu Diesem Teil belässt:
Bekommst Du alle Sternchen weg
Gruß Phil
wenn in Deinen Dateinamen fehlende Ausrufezeichen keine Rolle spielen und Du von Beginn an in Deinem Batch
setlocal enabledelayedexpansion
:Check
for /f "tokens=1*delims=*" %%i in ("!Name!") do for /f "delims=" %%k in ("%%j") do (set "Name=%%i%%j"
goto :Check
)
Gruß Phil