Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Leerzeichen, Sonderzeichen in Dateinamen lassen Batch crashen

Frage Entwicklung Batch & Shell

Mitglied: Domain-Jane

Domain-Jane (Level 1) - Jetzt verbinden

01.02.2015, aktualisiert 20:08 Uhr, 904 Aufrufe, 3 Kommentare

Hallo zusammen,

hier meine Frage zum Sonntag ;):

Mit dem Dir-Befehl lasse ich mir eine Datei erzeugen, indem Pfad+Dateinamen stehen, die ich anschließend
mit for Schleifen weiterverarbeiten lasse.

Funktioniert soweit alles super, nur dass die Batch Zeichen wie "&" interpretiert und dann komische Sachen macht.
Bei Leerzeichen im Pfad oder Dateinamen stürzt sie einfach ab.

Der Dir-Befehl ist:
01.
dir "y:\store\*" /s/b > "C:\files.txt"
Mit den beiden Schleifen gibt es dann bei Leerzeichen oder Steuerzeichen Probleme:
01.
for /f "usebackq delims=" %%u in ("C:\files.txt") do call :output "%%u"
01.
for /f "tokens=1-3" %%i in ('dir "%file%" /-C /S ^|find "Datei(en)" ^|find "Bytes"') do set size=%%k
Habt ihr eine Idee, wie ich den Dir-Befehl verändern kann, damit die Ausgabe für die For-Schleifen lesbar ist?
Oder gibt es vielleicht für die Schleifen noch zusätzliche Optionen?

Liebe Grüße!
Janet
Mitglied: Domain-Jane
01.02.2015, aktualisiert um 20:42 Uhr
So, der Fehler mit den Leerzeichen ist behoben (doppelte Anführungszeichen).
Allerdings gibt es immer noch Probleme mit Steuerzeichen (z.B. "&") im Dateinamen.

Offensichtlich produziert schon die erste Schleife den Fehler beim Setzen der Variable %file%:

01.
for /f "usebackq delims=" %%u in ("C:\files.txt") do call :output "%%u" 
02.
:goto eof 
03.
:output 
04.
set "file=%1"
Bitte warten ..
Mitglied: rubberman
01.02.2015, aktualisiert um 20:57 Uhr
Hallo Janet.

Da hast du dir was schönes eingebrockt
Der Fehler kommt in Zeile 4. Wenn du z.B. "a&b c.txt" übergibst, dann ergibt sich dort ...
set "file="a&b c.txt""
... und schon stehen wieder die falschen Dinge in einem Paar Anführungszeichen.
Um dich vor anderen Unzulänglichkeiten (bspw. Dateinamen mit Prozentzeichen) zu schützen, würde ich die Übergabe als Parameter ganz entfernen und statt dessen vorab die Zuweisung der Variablen vornehmen.

01.
@echo off &setlocal 
02.
for /f "usebackq delims=" %%u in ("C:\files.txt") do ( 
03.
  set "file=%%~u" 
04.
  call :output 
05.
06.
pause 
07.
exit /b 
08.
 
09.
:output 
10.
echo "%file%" 
11.
exit /b
Grüße
rubberman
Bitte warten ..
Mitglied: Domain-Jane
01.02.2015 um 21:22 Uhr
Oh verdammt, danke! ;)
Das ist schon was. Das ist was! Und zwar sehr gut!
Works like charm.

Vielen Dank, du Pfiffiger!
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
gelöst Batch Leerzeichen in nur bestimmten Spalten entfernen? (2)

Frage von Komoran12 zum Thema Batch & Shell ...

Batch & Shell
gelöst Dateinamen mit Batch-Datei ändern - Problem (9)

Frage von fffffuuuuuuuhhhh zum Thema Batch & Shell ...

Sonstige Systeme
Batch Dateinamen zerlegen (5)

Frage von Mummel zum Thema Sonstige Systeme ...

Batch & Shell
Batch - Umlaute usw (4)

Frage von Xaero1982 zum Thema Batch & Shell ...

Neue Wissensbeiträge
Windows Server

Umstellung SHA 1 auf SHA 2 - Migration der CA von CSP auf KSP

Tipp von Badger zum Thema Windows Server ...

Windows 10

Quato DTP94 unter Windows 10 x64 installieren und verwenden

Anleitung von anteNope zum Thema Windows 10 ...

Windows 10

Win10 1703 und Nutzerkennwörter bei Ersteinrichtung - erstaunliche Erkenntnis

(15)

Erfahrungsbericht von DerWoWusste zum Thema Windows 10 ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
CNC Maschinen verlieren Netzwerkverbindung (kurioser Fehler) (22)

Frage von NoHopeNoFear zum Thema LAN, WAN, Wireless ...

Drucker und Scanner
Erfahrungen mit Enterprise-Tintenstrahldruckern A4 und A3 (14)

Frage von User1000 zum Thema Drucker und Scanner ...

Webentwicklung
Aktuellen Mitarbeiter auf Homepage anzeigen (13)

Frage von alemanne21 zum Thema Webentwicklung ...