Top-Themen

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

Mitglied: don.redhorse

don.redhorse (Level 1) - Jetzt verbinden

12.10.2011 um 13:46 Uhr, 7708 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. https://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
String in Datei umbennen
gelöst Frage von DarkatohmBatch & Shell3 Kommentare

Hallo zusammen, ich versuche ein Batch-Skript zu schreiben, bei dem ich einen String in einer Datei umbenennen kann. Hierzu ...

Outlook & Mail

EMails werden nach 3 Monaten entfern - Einstellung

Frage von staybbOutlook & Mail5 Kommentare

Hallo, ich habe bei einem Postfach das Problem, dass in Outlook alle Mails älter wie 3 Jahre verscheinden und ...

Batch & Shell

Text Datei bis bestimmten String kopieren und auslagern

Frage von SKBadoxBatch & Shell4 Kommentare

Hallo zusammen, wie der Titel schon sagt suche ich nach einem .bat Skript dass vom Anfang der .txt Datei ...

Batch & Shell

Bestimmten Teil eines String aus einer XML-Datei auslesen

gelöst Frage von Dnis822Batch & Shell13 Kommentare

Hallo zusammen, ich stehe vor folgendem Problem: Ich habe eine XML-Datei die bspw. so aussieht: <Url1> <Directory>C:\MeinVerzeichnis\test\</Directory> 'Name' und ...

Neue Wissensbeiträge
Exchange Server

1und1 IONOS: Probleme beim Mailversand mit Exchange

Information von reksierp vor 4 StundenExchange Server3 Kommentare

Hallo, seit Do, 17.1.19 etwa Mittags nimmt 1und1 IONOS keine Mails mehr über den Standard-Port SMTP 25 an. Nachdem ...

LAN, WAN, Wireless

Cisco Mikrotik VPN Standort Vernetzung mit dynamischem Routing

Anleitung von aqui vor 18 StundenLAN, WAN, Wireless

1. Allgemeine Einleitung Das nachfolgende Tutorial ist eine Fortführung der hier bei Administrator.de schon bestehenden VPN Tutorials und beschreibt ...

Windows Mobile

Support für Windows Mobile endet im Dezember 2019

Information von transocean vor 2 TagenWindows Mobile

Moin, Microsoft empfiehlt als Alternative den Umstieg auf iOS oder Android, wie man hier lesen kann. Gruß Uwe

Internet

Kommentar: Bundesregierung erwägt Ausschluss von Huawei im 5G-Netz - Unsere Presse wird immer sensationsgieriger

Information von Frank vor 4 TagenInternet6 Kommentare

Hier mal wieder ein schönes Beispiel für fehlgeleiteten Journalismus und Politik zugleich. Da werden aus Gerüchten plötzlich Fakten, da ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
Temporäre WLAN Verbindung für AD-Login
Frage von Christian.WidauerLAN, WAN, Wireless17 Kommentare

Hallo zusammen, ich weiß leider nicht unter welchem Begriff ich dafür suchen muss, daher habe ich bisher leider nichts ...

LAN, WAN, Wireless
Bekannte Drosselungen bei Providern ?
Frage von HenereLAN, WAN, Wireless15 Kommentare

Servus zusammen, in bereits angefangen, aber ich hoffe dass der Beitrag hier mehr Informationen bringt. Sind Portdrosselungen bzw gezielte ...

Netzwerkmanagement
Reverse Proxy für TCP und UDP Anfragen
gelöst Frage von flxklsNetzwerkmanagement14 Kommentare

Hallo zusammen, ich besitze einen Rootserver, der nur eine öffentliche IP besitzt und auf dem mehrere VMs laufen. Da ...

Windows Server
MSSQL Backup in Form von .sql einspielen
Frage von janosch12Windows Server14 Kommentare

Guten Morgen, wir verwenden das Tool SQLandFTPBackup ( ) zum sichern einiger MSSQL Datenbanken. Nun sichert das Toll die ...