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

Sonderzeichen (UND-Zeichen) in Dateinamen bringt Batch zu Absturz

Frage Entwicklung Batch & Shell

Mitglied: DHammes

DHammes (Level 1) - Jetzt verbinden

24.05.2011, aktualisiert 19:02 Uhr, 4925 Aufrufe, 6 Kommentare

Hallo zusammen,

ich habe ein Problem welches ich bisher einfach nicht lösen kann. Ich habe zwar schon stundenlang
gegoogled aber anscheinend bin ich zu blind die Lösung zu finden.

Ein bereits exsitierender Thread ..kaufmännisches Und-Zeichen in den Übergabeparametern hat leider nicht geholfen.

Folgendes Szenario ist gegeben.

Eine Batchdatei soll ein Verzeichnis durchsuchen und alle Dateiname in eine Datei schreiben.
Im nächsten Schritt sollen diese Dateien weiter verarbeitet werden, in dem die Dateinamen und Inhalte
aus den Dateien in andere Dateien übertragen werden sollen.


01.
@echo off & setlocal enableDelayedExpansion  
02.
 
03.
set R=Replacer.vbs 
04.
 
05.
Dir /A /B /S .\DatFiles\*.dat > %Dat_Files% 
06.
 
07.
FOR /f "delims=" %%x in (%Dat_Files%) do ( 
08.
     for /f "delims=" %%i in ('findstr /n . "%%~x"^|findstr "^2:"') do @set ln2=%%i & call:Sub_Names !ln2:*"="! "%%x" 
09.
10.
Goto :eof 
11.
 
12.
:Sub_Names 
13.
@Rem %1 = Inhalt der zweiten Zeile der verarbeiteten Datei 
14.
@Rem %2 = Name inkl. Pfad des aktuellen DAT-Files 
15.
 
16.
set Setname=%1 
17.
@set cmp_file=Control.cmp 
18.
@set cmp_path=%~d2%~p2 
19.
@set cmp_path=%cmp_path:DatFiles=Settings% 
20.
@set dat_file=%~n2 
21.
 
22.
@>%R% echo Set fso=CreateObject("Scripting.FileSystemObject"): T=fso.OpenTextFile("%cmp_file%").ReadAll: fso.CreateTextFile("%cmp_file%",True).Write Replace(T,"Misc_DatfileNameTag = ","Misc_DatfileNameTag = " + "%Setname%") 
23.
@cscript //nologo %R% 
24.
@>%R% echo Set fso=CreateObject("Scripting.FileSystemObject"): T=fso.OpenTextFile("%cmp_file%").ReadAll: fso.CreateTextFile("%cmp_file%",True).Write Replace(T,"Scanner_FastScan = ","Scanner_FastScan = \%dat_file%.fsc") 
25.
@cscript //nologo %R%

Sobald aber ein Dateiname ein "&" enthält bricht die Verarbeitung aufgrund der Bedeutung des &-Zeichens
natürlich ab, wenn ich erweiterte Parameterfunktionen verwenden will. z.B. ~n, ~p, ~d.
Auch eine Zuweisung an eine Zwischenvariable hilft nicht, da die erweiterten Paramterfunktionen
wie ~n, ~d usw. dann nicht mehr funktionieren.

Für eine Hilfe zur Lösung des Problems bin ich sehr dankbar.

[Edit Biber] Link editiert (war nicht aufrufbar) und Codeformatierung ergänzt]
Mitglied: Friemler
24.05.2011 um 19:30 Uhr
Hallo DHammes,

warum setzt Du nicht die komplette Lösung in VBS um? Ist viel weniger stressig. Außerdem verwendest Du ja schon VBS und wenn ich mir den Code so anschaue, wirst Du in 3 Monaten, wenn mal eine Anpassung gemacht werden muss, selbst nicht mehr durchblicken. Die Umgehung von Problemen mit Sonderzeichen wie &,%,(,) usw. in Dateinamen ist in Batchscript ziemlich aufwändig, kostet Zeit und verringert die Übersichtlichkeit meistens noch mehr.

Gruß
Friemler
Bitte warten ..
Mitglied: Biber
24.05.2011 um 19:58 Uhr
Moin DHammes,

ergänzend zu Friemler würde ich sagen: Klar machen Streifen irgendwie schlank.
Aber wenn der Source so sehr in die Breite geht und dabei so kurz ist.... dann ist es ein indiz für das falsche Werkzeug.

( Wohlgemerkt: der Schnipsel sähe auch mit Zeilenumbrüchen und auf DIN-A4 ausgewalzt letzten Endes nicht appetitlicher aus.)

Nach es komplett mit VBScript.

Grüße
Biber
Bitte warten ..
Mitglied: DHammes
24.05.2011 um 21:15 Uhr
Hi Friemler,

das VBS-Script habe ich selbst auch aus dem Internet rausgesucht da ich mich absolut nicht damit auskenne.
Anscheinend bleibt mir nichts anderes übrig als VBS zu lernen. Wenn aber jemandem trotzdem eine Lösung
für mein Problem einfällt bitte posten

Trotzdem Danke.
Bitte warten ..
Mitglied: Friemler
25.05.2011 um 00:31 Uhr
Hallo DHammes,

Ungetestet:
01.
Const ForReading = 1 
02.
Const ForWriting = 2 
03.
Const AsASCII    = 0 
04.
 
05.
strDatFileDir  = ".\DatFiles" 
06.
strDatFileType = "dat" 
07.
 
08.
Set objFSO    = CreateObject("Scripting.FileSystemObject") 
09.
Set objFolder = objFSO.GetFolder(strDatFileDir) 
10.
Set colFiles  = objFolder.Files 
11.
 
12.
For Each objFile in colFiles 
13.
  If UCase(objFSO.GetExtensionName(objFile.Name)) = UCase(strDatFileType) Then 
14.
    Set objDatFile = objFile.OpenAsTextStream(ForReading, AsASCII) 
15.
    objDatFile.SkipLine 
16.
    strSetname = objDatFile.ReadLine 
17.
    objDatFile.Close 
18.
 
19.
    If InStr(strSetname, """") > 0 Then 
20.
      strSetname = Mid(strSetname, InStr(strSetname, """")) 
21.
    End If 
22.
     
23.
    strCmpFileName = "Control.cmp" 
24.
    strCmpPath     = objFile.ParentFolder 
25.
    strCmpPath     = Replace(strCmpPath, "DatFiles", "Settings") 
26.
    strDatFile     = objFSO.GetBaseName(objFile.Name) 
27.
     
28.
    ReplaceInFile strCmpPath & "\" & strCmpFileName, "Misc_DatfileNameTag = ", "Misc_DatfileNameTag = " & strSetname 
29.
    ReplaceInFile strCmpPath & "\" & strCmpFileName, "Scanner_FastScan = ", "Scanner_FastScan = \" & strDatFile & ".fsc" 
30.
  End If 
31.
Next 
32.
 
33.
 
34.
 
35.
Sub ReplaceInFile(strFileName, strPattern, strString) 
36.
  Dim objSomeFile, strText 
37.
   
38.
  Set objSomeFile = objFSO.OpenTextFile(strFileName, ForReading, False, AsASCII) 
39.
  strText = objSomeFile.ReadAll 
40.
  objSomeFile.Close 
41.
   
42.
  Set objSomeFile = objFSO.OpenTextFile(strFileName, ForWriting, False, AsASCII) 
43.
  objSomeFile.Write Replace(strText, strPattern, strString) 
44.
  objSomeFile.Close 
45.
End Sub
Suche mal bei Google nach "script56.chm", das müsste als erstes diesen Link ausspucken. Das ist eine gute Hilfe zum Lernen von VBS und JScript.

Gruß
Friemler
Bitte warten ..
Mitglied: DHammes
25.05.2011 um 10:15 Uhr
Hi Friemler,

vielen Dank für den Code-Schnipsel. Ich denke mal das ist 'ne Basis auf die ich aufbauen kann. Zumindest verstehe ich wie der Code funktionieren soll :D
Also nochmals vielen Dank.
Bitte warten ..
Mitglied: jeb-the-batcher
26.05.2011 um 23:02 Uhr
Hallo DHammes,

eine einfache Lösung ist meistens bei SET Anweisungen Anführungszeichen zu verwenden
01.
SET "var=%%~i"
Danach sollte man auf var nur noch per delayed expansion zugreifen, weil dann Sonderzeichen keine Rolle mehr spielen

Gruß
jeb
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Leerzeichen, Sonderzeichen in Dateinamen lassen Batch crashen
Frage von Domain-JaneBatch & Shell3 Kommentare

Hallo zusammen, hier meine Frage zum Sonntag ;): Mit dem Dir-Befehl lasse ich mir eine Datei erzeugen, indem Pfad+Dateinamen ...

Netzwerkgrundlagen
VLAN bringt Netzwerk zum "abstürzen"
gelöst Frage von XLS202Netzwerkgrundlagen19 Kommentare

Hallo Normalerweise schreibe ich nicht gerne in Foren, von daher verzeiht mir wenn ich nicht alle Infos gleich schreibe ...

Batch & Shell
Bestimmte Zeichen per Batch aus Dateinamen entfernen
gelöst Frage von wollebeeBatch & Shell6 Kommentare

Ich bekomme Dateien, bei denen ich automatisch per Batch den Dateinamen ändern möchte. Nun besteht der erste Teil des ...

Batch & Shell
Setlocal enabledelayedexpansion und Sonderzeichen (z.B. !-Zeichen)
Frage von adm2015Batch & Shell2 Kommentare

Hallo Zusammen, ich bin mir sicher, dass dieses Thema schon öfters angesprochen wurde. Leider finde ich hierzu aber nichts. ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 1 TagWindows 107 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 1 TagSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 2 TagenInternet5 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 2 TagenDSL, VDSL2 Kommentare

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
Batch & Shell
Kann man mit einer .txt Datei eine .bat Datei öffnen?
Frage von HelloWorldBatch & Shell18 Kommentare

Wie schon im Titel beschrieben würde ich gerne durch einfaches klicken auf eine Text oder Word Datei eine Batch ...

Router & Routing
OpenWRT bzw. L.E.D.E auf Buffalo WZR-HP-AG300H - update
gelöst Frage von EpigeneseRouter & Routing11 Kommentare

Guten Tag, ich habe auf einem Buffalo WZR-HP-AG300H die alternative Firmware vom L.E.D.E Projekt geflasht. Ich bin es von ...

Windows Server
Ping auf einen bestimmten Server nicht möglich
gelöst Frage von a.thierWindows Server7 Kommentare

Hallo, ich habe folgendes Problem. srv-dc1: Ping srv-nav > geht Ping srv-exchange > geht nicht srv-exchange: Ping srv-dc1 > ...

Windows 10
Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App
Tipp von kgbornWindows 107 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...