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

Batch & Shell

Teile eines Strings entfernen

gelöst Frage von oesi1989Batch & Shell17 Kommentare

Ich würde gerne die Domäne und den hinteren Teil entfernen lassen mit "Remove". Leider klappt es nicht immer, da ...

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

Neue Wissensbeiträge
Windows 10
Windows 10 Oktober 2018 Update: Es ist wieder da
Tipp von Bowsette vor 3 StundenWindows 10

Ein neuer Versuch von Microsoft das Windows 10 Oktober 2018 Update, auch bekannt als 1809, an den Mann zu ...

Windows Server

Windows Server 2016: Achtung - ab heute gibt es wieder Express Updates

Information von kgborn vor 14 StundenWindows Server1 Kommentar

Kurze Info für Administratoren, die Windows Server 2016 per WSUS/SCCM mit Updates betanken. Ab heute gibt es für Windows ...

Windows Netzwerk
Windows Admin Center - Sagt was ihr braucht!
Tipp von Juanito vor 1 TagWindows Netzwerk18 Kommentare

Hallo zusammen, der ein- oder andere hat sicherlich schon vom Windows Admin Center gehört. - Microsoft's neue Adminkonsole welche ...

Verschlüsselung & Zertifikate

Bitlocker-Verschlüsselung und -Monitoring ohne MBAM

Tipp von DerWoWusste vor 2 TagenVerschlüsselung & Zertifikate

Der Folgende Tipp beschreibt, wie man ohne MBAM die Verschlüsselung erzwingt und monitort. MBAM ist ein Enterprise-Benefit und somit ...

Heiß diskutierte Inhalte
Entwicklung
Meine Nachbarn sehen meinen Internet Trafic
gelöst Frage von beatnguEntwicklung51 Kommentare

Hallo Also ich wohne in einem Mehrparteien Haus mit 24 wohnungen. Meine nachbaren im letzten stock fummeln immer an ...

Microsoft Office
Lizenzierung
Frage von opc123Microsoft Office29 Kommentare

Hallo, eventuell ein oft bekanntes Thema. Office 365 ist mir zu teuer, da wir als Bildungsträger andere Konditionen beim ...

Windows 10
Windows 10 mit CRITICAL PROCESS DIED
Frage von liquidbaseWindows 1028 Kommentare

Das aktuelle Problem was ich habe steht bereits im Threadtitel. Etwas mehr zum Hintergrund soll nun folgen. Problemkind ist ...

Voice over IP
Andere Rufnummer bei abgehenden Gesprächen vom All-IP-Anschluß der Telekom anzeigen
Frage von vafk18Voice over IP19 Kommentare

Ich möchte bei abgehenden Gesprächen vom All-IP-Anschluß der Telekom meine Handynummer hinterlegen, damit ich Rückrufe jederzeit empfangen kann. Derzeit ...