Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Anführungszeichen, Schräger etc. aus String entfernen zum Umbenennen einer Datei

Frage Entwicklung Batch & Shell

Mitglied: don.redhorse

don.redhorse (Level 1) - Jetzt verbinden

12.10.2011 um 13:46 Uhr, 6557 Aufrufe, 4 Kommentare

Da der eigentlichen Thread ein "wenig" unübersichtlich wurde, hier die Fortsetzung.

Hallo,

in diesem Thread wurde mein Problem schon soweit gelöst. http://www.administrator.de/?content=166065

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:
01.
for /f "tokens=1,2* delims=," %%i in ('type "%~1.txt" ^|findstr "1ST"') do set "var=%%i" 
02.
set "var=!var:~18,-1!"
in der Zeile steht dann soetwas wie:

01.
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:

01.
if not exist "%~1.txt" echo Fehler bei Datei %~1 >> "Aufträge.log" 
02.
for /f "tokens=1,2* delims=," %%i in ('type "%~1.txt" ^|findstr "1ST"') do set "var=%%i" 
03.
set "var=!var:~18,-1!" 
04.
 
05.
echo %var% 
06.
call b.cmd %var%>kopie.txt 
07.
echo call Ende 
08.
pause 
09.
 
10.
for /f "tokens=* delims=," %%i in ('type "kopie1.txt" ') do set "var=%%i" 
11.
 
12.
echo %var% 
13.
pause 
14.
if exist kopie.txt del kopie.txt
mit diesem Part rufe ich also eine weitere Batch auf:

01.
@ECHO OFF 
02.
setlocal enabledelayedexpansion 
03.
rem echo b.cmd %datei% 
04.
for /f "delims=" %%i in ("%var%") do ( 
05.
	set "line=%%i"  
06.
	echo !line:/=! 
07.
08.
call c.cmd>kopie1.txt 
09.
goto :EOF 
10.
:EOF
und damit noch eine:
01.
@ECHO OFF 
02.
setlocal enabledelayedexpansion 
03.
for /f "tokens=* delims=," %%i in ('type "kopie.txt" ') do set "var=%%i" 
04.
for /f "delims=" %%i in ("%var%") do ( 
05.
	set "line=%%i"  
06.
	echo !line:"=! 
07.
08.
 
09.
goto :EOF 
10.
: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:

01.
@echo off 
02.
setlocal enabledelayedexpansion 
03.
set "Dateiname=0" 
04.
@chcp 1252 
05.
cd /d "C:\Users\Public\Documents\Aufträge" 
06.
for /f "delims=" %%a in ('dir /b PO*.pdf') do call :processlines "%%~na" 
07.
goto :eof 
08.
 
09.
REM DATEINAME EINLESEN 
10.
:processlines 
11.
set Dateiname=%~1 
12.
echo %Dateiname% >> "Aufträge.log" 
13.
for /f "tokens=3,4,5 delims= " %%a in ("%Dateiname%") do set "Datei"="%%a %%b %%c" 
14.
 
15.
REM PDF IN TEXT WANDELN 
16.
C:\script\pdf2txt\pdftotext.exe -layout "%~1.pdf" 
17.
 
18.
REM AUFTRAGSBESCHREIBUNG KOPIEREN 
19.
if not exist "%~1.txt" echo Fehler bei Datei %~1 >> "Aufträge.log" 
20.
for /f "tokens=1,2* delims=," %%i in ('type "%~1.txt" ^|findstr "1ST"') do set "var=%%i" 
21.
set "var=!var:~18,-1!" 
22.
 
23.
REM BASTELEI FÜR SONDERZEICHEN 
24.
call b.cmd %var%>kopie.txt 
25.
echo call Ende 
26.
 
27.
for /f "tokens=* delims=," %%i in ('type "kopie1.txt" ') do set "var=%%i" 
28.
 
29.
echo %var% 
30.
pause 
31.
if exist kopie.txt del kopie.txt 
32.
if exist kopie1.txt del kopie1.txt 
33.
 
34.
REM LEERZEICHEN ELIMINIEREN IN AUFTRAGSBESCHREIBUNG 
35.
:loop1 
36.
rem echo !var! 
37.
if "%var:~0,1%"==" " set "var=%var:~1%" & goto :loop1 
38.
:loop2 
39.
if "%var:~-1%"==" " set "var=%var:~0,-1%" & goto :loop2 
40.
rem echo Nachher: #%var%# 
41.
 
42.
REM AUFTRAGSGEBER HERRAUSFINDEN UND KOPIEREN 
43.
for /f "tokens=2 delims=:+" %%i in ('type "%~1.txt" ^|findstr "standhaltung:"') do set "nam=%%i" 
44.
set "nam=!nam:~0,-1!" 
45.
 
46.
REM LEERZEICHEN ELIMINIEREN IN NAME AUFTRAGSGEBER 
47.
:loop11 
48.
rem echo !nam! 
49.
if "%nam:~0,1%"==" " set "nam=%nam:~1%" & goto :loop11 
50.
:loop21 
51.
if "%nam:~-1%"==" " set "nam=%nam:~0,-1%" & goto :loop21 
52.
rem echo Nachher: %nam% 
53.
 
54.
REM DAS GANZE ZUSAMMENFÜHREN UND DIE DATEI UMBENAMSEN 
55.
for /f "Tokens=2,4" %%a in ('type "%~1.txt" ^|findstr "Auftragsnummer"') do ( 
56.
	set "Name=%%a %%b !var! %Datei% %nam%.pdf" 
57.
	echo !Name! 
58.
	echo 	!Name! >> "Aufträge.log" 
59.
	set "Name=%%a %%b !var! %Datei% %nam%.pdf" 
60.
	if exist !Name! echo Datei schon vorhanden !Name!>> "Aufträge.log"	 
61.
	ren "%~1.pdf" "!Name!" 
62.
	del "%Dateiname%.txt" 
63.
64.
: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
Mitglied: jeb-the-batcher
12.10.2011 um 15:24 Uhr
Hallo don.redhorse,

zum einfachen entfernen von Sonderzeichen a'la <>&|": kann man einfach die ersetzung verwenden

01.
setlocal EnableDelayedExpansion 
02.
set "filename=!filename:&=!" 
03.
set "filename=!filename:<=!" 
04.
set "filename=!filename:>=!" 
05.
set "filename=!filename:|=!" 
06.
set "filename=!filename:"=!" 
07.
set "filename=!filename::=!" 
08.
echo !filename!
Entfernt einfach diese Zeichen aus filename

jeb
Bitte warten ..
Mitglied: don.redhorse
13.10.2011 um 08:14 Uhr
guten Morgen,

Danke, dass funktioniert schon sehr gut, aber:

01.
REM BASTELEI FÜR SONDERZEICHEN 
02.
rem echo vorher !var! 
03.
 
04.
set "var=!var:\=!" 
05.
set "var=!var:/=!" 
06.
set "var=!var::=!" 
07.
 
08.
set "var=!var:?=!" 
09.
set "var=!var:"=!" 
10.
set "var=!var:<=!" 
11.
set "var=!var:>=!" 
12.
set "var=!var:|=!" 
13.
echo !var!
so sieht das jetzt aus.
Diese Zeichen dürfen im Dateinamen nicht erscheinen.
In die Lücke gehört eigentlich noch
01.
 * 
, nehme ich es aber mit rein wird der Inhalt von "var" gegen
01.
*=
getauscht.

wenn ich jetzt in der Zeile die in "var" gespeichert wird ein "*" habe wird der Dateiname an dieser Stelle von einem Teil von "var" ergänzt.

Sterne werden in der Auftragsbeschreibung zwar nicht, bzw. nicht oft verwendet, aber gibts da nicht doch eine Möglichkeit?

Die betreffende Textzeile sieht so aus:

01.
Auftrag: Bringe bitte die Bananen > Raum "D" / "C" bei < 2 Stück nur nach "A|B" \oder?
Das wird in:
01.
Auftrag Bringe bitte die Bananen  Raum D  C bei  2 Stück nur nach AB oder
gewandelt.

aus:
01.
Auftrag: Bringe bitte die *Bananen > Raum "D" / "C" bei < 2 Stück nur nach "A|B" \oder?
wird
01.
Auftrag Bringe bitte die .06.2011.pdfBananen  Raum D  C bei  2 Stück nur nach AB oder
Grüße aus dem, tatsächlich, trockenen Münster
Bitte warten ..
Mitglied: pieh-ejdsch
13.10.2011 um 20:05 Uhr
moin don.redhorse,

wenn in Deinen Dateinamen fehlende Ausrufezeichen keine Rolle spielen und Du von Beginn an in Deinem Batch
setlocal enabledelayedexpansion
Bis zu Diesem Teil belässt:
01.
:Check 
02.
for /f "tokens=1*delims=*" %%i in ("!Name!") do for /f "delims=" %%k in ("%%j") do (set "Name=%%i%%j" 
03.
  goto :Check 
04.
)
Bekommst Du alle Sternchen weg

Gruß Phil
Bitte warten ..
Mitglied: don.redhorse
14.10.2011 um 10:29 Uhr
Moin!

Ausrufezeichen etc. sind egal. Geht nur darum den Kurztext des Auftrages in den Dateinamen zu bekommen.

Jetzt klappt es. Danke!

Ich hänge die ganze Batch mal an:

01.
@echo off 
02.
setlocal enabledelayedexpansion 
03.
set "Dateiname=0" 
04.
@chcp 1252 
05.
cd /d "C:\Users\Public\Documents\Aufträge" 
06.
for /f "delims=" %%a in ('dir /b PO*.pdf') do call :processlines "%%~na" 
07.
goto :eof 
08.
 
09.
REM DATEINAME EINLESEN 
10.
:processlines 
11.
set Dateiname=%~1 
12.
echo %Dateiname% >> "Aufträge.log" 
13.
for /f "tokens=3,4,5 delims= " %%a in ("%Dateiname%") do set "Datei=%%a %%b %%c" 
14.
 
15.
REM PDF IN TEXT WANDELN 
16.
C:\script\pdf2txt\pdftotext.exe -layout "%~1.pdf" 
17.
 
18.
REM AUFTRAGSBESCHREIBUNG KOPIEREN 
19.
if not exist "%~1.txt" echo Fehler bei Datei %~1 >> "Aufträge.log" 
20.
for /f "tokens=1,2* delims=," %%i in ('type "%~1.txt" ^|findstr "1ST"') do set "var=%%i" 
21.
set "var=!var:~18,-1!" 
22.
 
23.
REM BASTELEI FÜR SONDERZEICHEN 
24.
set "var=!var:\=!" 
25.
set "var=!var:/=!" 
26.
set "var=!var::=!" 
27.
set "var=!var:?=!" 
28.
set "var=!var:"=!" 
29.
set "var=!var:<=!" 
30.
set "var=!var:>=!" 
31.
set "var=!var:|=!" 
32.
 
33.
REM STERNE RAUSWERFEN 
34.
:Check 
35.
for /f "tokens=1*delims=*" %%i in ("!var!") do for /f "delims=" %%k in ("%%j") do (set "var=%%i%%j" 
36.
	goto :Check 
37.
38.
 
39.
REM LEERZEICHEN ELIMINIEREN IN AUFTRAGSBESCHREIBUNG 
40.
:loop1 
41.
rem echo !var! 
42.
if "%var:~0,1%"==" " set "var=%var:~1%" & goto :loop1 
43.
:loop2 
44.
if "%var:~-1%"==" " set "var=%var:~0,-1%" & goto :loop2 
45.
rem echo Nachher: #%var%# 
46.
 
47.
REM AUFTRAGSGEBER HERRAUSFINDEN UND KOPIEREN 
48.
for /f "tokens=2 delims=:+" %%i in ('type "%~1.txt" ^|findstr "standhaltung:"') do set "nam=%%i" 
49.
set "nam=!nam:~0,-1!" 
50.
 
51.
REM LEERZEICHEN ELIMINIEREN IN NAME AUFTRAGSGEBER 
52.
:loop11 
53.
rem echo !nam! 
54.
if "%nam:~0,1%"==" " set "nam=%nam:~1%" & goto :loop11 
55.
:loop21 
56.
if "%nam:~-1%"==" " set "nam=%nam:~0,-1%" & goto :loop21 
57.
 
58.
REM DAS GANZE ZUSAMMENFÜHREN UND DIE DATEI UMBENAMSEN 
59.
for /f "Tokens=2,4" %%a in ('type "%~1.txt" ^|findstr "Auftragsnummer"') do ( 
60.
	set "Name=%%a %%b !var! %Datei% %nam%.pdf" 
61.
	rem echo !Name! 
62.
	echo 	!Name! >> "Aufträge.log" 
63.
	set "Name=%%a %%b !var! %Datei% %nam%.pdf" 
64.
	if exist !Name! echo Datei schon vorhanden !Name!>> "Aufträge.log"	 
65.
	ren "%~1.pdf" "!Name!" 
66.
	del "%Dateiname%.txt" 
67.
68.
:eof
Danke und Grüße aus Münster

ab ins Wochenende
Bitte warten ..
Neuester Wissensbeitrag
DSL, VDSL

Telekom blockiert immer noch den Port 7547 in ihrem Netz

(3)

Erfahrungsbericht von joachim57 zum Thema DSL, VDSL ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (34)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...