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

Frage Entwicklung Batch & Shell

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, 7149 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
Anführungszeichen aus übergebenen Parametern entfernen
gelöst Frage von RaidManBatch & Shell2 Kommentare

Hallo Kenner und Könner, bin gerade dabei eine Batch zu basteln die Textdateien (detail infos) ändern soll dazu wollte ...

Batch & Shell
Dateien umbenennen - ersten Zeichen entfernen
Frage von jan999Batch & Shell4 Kommentare

Moin! meine bessere Hälfte hat mich nach der Lösung folgender Aufgabe gefragt - eine Idee habe ich. Nur weiß ...

Batch & Shell
Anführungszeichen in Batch Datei ausgeben
gelöst Frage von AtalicsBatch & Shell6 Kommentare

Guten Abend Leute, ich wollte eine Verknüpfung per CMD erstellen (Code von bastla, funktioniert ohne meine Veränderungen einwandfrei ^^), ...

Batch & Shell
Zeichen aus einem String entfernen
gelöst Frage von JimStarBatch & Shell3 Kommentare

Guten Tag zusammen, ich möchte folgendes tun: In einer Textdatei, steht eine Zeile. Diese beinhaltet z.B.: Diese Textzeile muss ...

Neue Wissensbeiträge
Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 17 StundenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 17 StundenSicherheit11 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 18 StundenSicherheit9 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Sicherheit

Meltdown und Spectre: Die machen uns alle was vor

Information von Frank vor 18 StundenSicherheit13 Kommentare

Aktuell sieht es in den Medien so aus, als hätten die Hersteller wie Intel, Microsoft und Co den aktuellen ...

Heiß diskutierte Inhalte
Windows 10
Netbook erkennt Soundkarte nicht - keinerlei Info zum Hersteller und Modell vom Netbook und Hardware bekannt
Frage von 92943Windows 1031 Kommentare

Guten Tag, meine Schwester reist in einigen Wochen für ein paar Monate ins Ausland und hat sich dafür ein ...

Batch & Shell
Anmeldevorgang für Informatikraum (Schule) unter Windows
gelöst Frage von IngenieursBatch & Shell29 Kommentare

Hey zusammen, ich werde in naher Zukunft den Informatik Raum meiner jetzigen Schule von dem aktuellen Betreiber übernehmen (Vertrag ...

Netzwerkgrundlagen
Welches Modem für VDSL 50000 der T-Com
gelöst Frage von Windows10GegnerNetzwerkgrundlagen21 Kommentare

Hallo, ein Kollege von mir will sich VDSL50000 von der T-Com holen, um daran einen Server zu betreiben. Ich ...

Batch & Shell
AD-Abfrage in Batchdatei und Ergebnis als Variable verarbeiten
gelöst Frage von Winfried-HHBatch & Shell19 Kommentare

Hallo in die Runde! Ich habe eine Ergänzungsfrage zu einem alten Thread von mir. Ausgangslage ist die Batchdatei, die ...