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, 7338 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

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

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

Visual Studio

VBScript Zeichenfolge aus String entfernen

gelöst Frage von Leogal0010Visual Studio1 Kommentar

Hallo, Community! Ich habe da ein Problem: Ich schreibe einen kleinen "LAN-Chat" mit VBScript/VBS. D.h. auf einem Laufwerk, auf ...

Batch & Shell

Auslesen einer Datei mit einem Anführungszeichen im Text

Frage von c20082005Batch & Shell1 Kommentar

Hallo zusammen, ich habe ein Problem, das ich auch nach einiger Recherche im Internet nicht gelöst bekomme: Ich habe ...

Neue Wissensbeiträge
iOS
Updates für Iphone und Co
Information von sabines vor 10 MinuteniOS

Gestern abend ist iOS 11.3.1 erschienen, ein kleineres Update, dass einige Lücken schließt und "Lahmlegen" nach einem Display Tausch ...

Windows 7

Windows 7 - Server 2008 R2: Exploit für Total Meltdown verfügbar

Information von kgborn vor 1 TagWindows 7

Kleine Information für Administratoren, die für die Updates von Windows 7 SP1 und Windows Server 2008 R2 SP1 verantwortlich ...

Sicherheit

Zero Day-Schwachstelle im Internet Explorer - wird von APT bereits ausgenutzt

Information von kgborn vor 1 TagSicherheit

Im Kernel des Internet Explorer scheint es eine Zero Day-Lücke zu geben, die von staatlichen Akteuren (APT) im Rahmen ...

Microsoft
Folder Security Viewer-Lizenzen zu gewinnen
Information von kgborn vor 1 TagMicrosoft

Ich nehme das Thema mal in Absprache mit Frank hier auf, da es für den einen oder anderen Administrator ...

Heiß diskutierte Inhalte
C und C++
Frage1 C Programmierung-Makefile Frage2 PHP-Programmierung HTTP-Fehler 404
Frage von KatalinaC und C++27 Kommentare

Hallo, ich habe 2 Fragen, die nichts miteinander zu tun haben aber mit denen ich mich gerade beschäftige: 1. ...

Linux
Linux Server oder Windows Server - lohnt eine Umstellung auf Linux und ebenso basierende SW bei einer langfristigen Planung?
Frage von motus5Linux27 Kommentare

Wir brauchen bei uns einen neuen Server. Dieser wird als Fileserver, Domäne Controller sowie Exchange Server verwendet. Wir versuchen ...

LAN, WAN, Wireless
Watchguard T15 VPN Einrichtung
gelöst Frage von thomasjayLAN, WAN, Wireless22 Kommentare

Hallo zusammen, wir möchten gerne über unsere Watchguard T15 einen VPN-Tunnel (Mobile VPN with IPSec) einrichten! Als Client nutzen ...

DSL, VDSL
ISP Wechsel auf Vodefone Koax, Gebäudeverkabelung nur per Cat 7
gelöst Frage von wusa88DSL, VDSL19 Kommentare

Hallo Zusammen, ich bin momentan bei Mnet als Glasfaser Kunde und möchte Preis/Leistungs-Technisch zu Kabel Deutschland / Vodafone wechseln. ...