Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

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, 6995 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 ..
Ähnliche Inhalte
Batch & Shell
Dateien umbenennen - ersten Zeichen entfernen (4)

Frage von jan999 zum Thema Batch & Shell ...

Viren und Trojaner
WannaCry - wiederhergestellte Dateien umbenennen (7)

Frage von MasterPhil zum Thema Viren und Trojaner ...

Batch & Shell
gelöst Schreiben eines Strings mit Leerzeichen in eine Datei (6)

Frage von c20082005 zum Thema Batch & Shell ...

Batch & Shell
gelöst Alle Dateien in einem Ordner umbenennen (5)

Frage von l.scheper zum Thema Batch & Shell ...

Neue Wissensbeiträge
Sicherheit

How I hacked hundreds of companies through their helpdesk

Information von SeaStorm zum Thema Sicherheit ...

Erkennung und -Abwehr

Ccleaner-Angriff war nur auf große Unternehmen gemünzt

(10)

Information von Lochkartenstanzer zum Thema Erkennung und -Abwehr ...

Sicherheit

Eventuell neue Lücke in Intels ME

Information von sabines zum Thema Sicherheit ...

Heiß diskutierte Inhalte
Humor (lol)
Freidach Beitrag (32)

Frage von Penny.Cilin zum Thema Humor (lol) ...

Lizenzierung
Programm soll in verschiedenen Versionen lizenziert sein (20)

Frage von Yanmai zum Thema Lizenzierung ...

Windows 7
SSD - Win7 Lags (19)

Frage von ph5555 zum Thema Windows 7 ...

Humor (lol)
Wo ist der Fehler auf dem Bild? (17)

Information von the-buccaneer zum Thema Humor (lol) ...