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 in mehreren Dateien Anführungszeichen entfernen

Mitglied: zweehh

zweehh (Level 1) - Jetzt verbinden

27.04.2008, aktualisiert 01.05.2008, 6654 Aufrufe, 15 Kommentare

Hallo allerseits,

ich bin neu im Forum und ein absoluter anfänger in batch

mein problem:
ich möchte aus mehreren Dateien Anführungszeichen entfernen. WIe ich dies für eine Datei mache habe ich mittlerweile hinbekommen.
Ich möchte es jetzt aber mit mehreren Dateien machen und das möglichst als schleife ausführen.
Lieder scheitere ich an der übergabe des entsprechenden dateinnamen. ich bekomme es leider nicht vernünftig hin eine variable zwischen zwei batchdateien zu übergeben.
kann mir jemand helfen
(sorry ich weiß das Problem nicht so kompliziert, aber ich habe es versucht und bin kläglich gescheitert und mir läuft momentan die Zeit davon.... )
vielen dank für die Mühe
Mitglied: miniversum
27.04.2008 um 19:14 Uhr
In der ersten Batchdatei gehst du jede Datei durch indem du die zweite dann so aufrufst:
FOR /F "delims=" %%i in ('dir /B C:\Verzeichnis\*.*') do call Verarbeite.bat "%%~fi"
So werden nun die einzelnen dateinamen der Verarbeite.bat übergeben. Natürlich kann der Filter *.* angepast werden.

In der Datei Verarbeite.bat kanst du dann den, als Parameter übergebenen Dateinamen dann mit der Variable %1 abholen.
Also in der Datei entweder direkt als %1 ansprechen oder in der Form:
set Dateiname=%1
Bitte warten ..
Mitglied: Biber
27.04.2008 um 19:20 Uhr
Moin zweehh,

willkommen im Forum.
Ein klein bissi abstrakt für eine Frage zu einem Skriptproblem ist Deine Beschreibung schon, hmm?

Aber egal, ich kann ja auf der selben Ebene antworten.
Wenn "ScrapQuotes.cmd D:\Eine\Textdatei.xyz" der Batch-Aufruf ist, der aus einer Textdatei die Anführungszeichen entfernt,
dann würden mehrere Dateien so abgefackelt werden können (Bsp am CMD-Prompt):
01.
For %i in (D:\Viele\Textdateien*.*) do ScrapQuotes "%i"
Für konkretere Antworten bitte konkreteren Sachverhalt posten.

Grüße
Biber
Bitte warten ..
Mitglied: zweehh
28.04.2008 um 08:19 Uhr
Hallo allerseits,

ja ich wiß mein erste Posting war nicht sehr aufschlussreich. Ich versuch nochmal genauer zu schreiben, wo es bei mir hackt.
Vorerst mal möchte ich mich für die ersten Vorschläge bedanken. Leider hat es immer noch nicht geklappt.
momentan habe ich eine bat-datei start.bat mit folgenden Inhalt:

FOR /F "delims=" %%i in ('dir /B E:\test\*.txt') do call verarbeite.bat "%%~fi"

und eine zweite verarbeite.bat

set dateiname=%1
for /f "delims=" %%i in (%dateiname%.txt) do ( set "line=%%i" echo !line:"=!)

Mein Ziel ist das alles txt-Dateien im Ordner Test nacheinander angesprochen werden und die Anführungszeichen gelöscht werden. Leider öffnet sich lediglich ein neues Eingabefenster und das wars.

Weiß jemand Rat.
Bitte warten ..
Mitglied: Biber
28.04.2008 um 09:21 Uhr
Moin zweehh,

ich würde es in einen Batch statt in zwei packen.

01.
@echo off & setlocal EnableDelayedExpansion 
02.
FOR /F "delims=" %%i in ('dir /B E:\test\*.txt') do ( 
03.
       FOR /F "delims=" %%j in ("%%~i") do set "line=%%j" & echo !line:"=! 
04.
)
Bei Deinem Schnipsel ist ein Problem, dass Du in der ersten FOR-Anweisung EINEN Dateinamen als Parameter übergibst...
do call verarbeite.bat "%%~fi"
...und im verarbeite.bat aber an diesen Parameter1 noch eine Endung .txt anhängst.

Du kannst beide FOR-Einzelzeilen (in Deinem Posting) jeweils am CMD-Prompt testen
  • indem Du alle doppelten Prozentzeichen auf einfache änderst
  • und statt "DO .." zum Testen "DO @Echo ...." schreibst

Bsp:
FOR /F "delims=" %i in ('dir /B E:\test\*.txt') do @echo call verarbeite.bat "%~fi"

Grüße
Biber
[Edit] "EnableDelayedExpansion" nachgetragen, s.u. [/Edit]
Bitte warten ..
Mitglied: zweehh
28.04.2008 um 09:52 Uhr
Hallo Biber,

vielen Dank für die Antwort und die Tipps.

Ich hab es wie du vorgeschlagen hast jetzt in eine Batch Datei gepackt.
Leider klappt es immer noch nicht.
Nach dem Aufruf erscheint im Eingabefenster lediglich folgender Text:

!line:"=!
!line:"=!
!line:"=!
...

(ANzahl entspricht der Anzahl der vorhandenen Textdateien)

Die Textdateien selbst haben aber immer noch sämtliche Anführungszeichen drin...

In den Textdateien steht der Text in diesem Format :

"Fx_1 = -405.32"
"Fy_1 = 0.37"
....
Liegt hier vielleicht das Problem?
Bitte warten ..
Mitglied: Biber
28.04.2008 um 11:42 Uhr
Liegt hier vielleicht das Problem?

nein... ist eher eins meiner Montagmorgens-Probleme*rotwerd* ...

Ergänze bitte die erste Zeile in Deinem Batch
Von JETZT GUT:
@echo off & Setlocal

Auf GUTER:
@echo off & Setlocal EnableDelayedExpansion

Ich trag es auch oben nach.
[Erst damit interpretiert die CMD.exe die !var! (Variablen in Ausrufezeichen richtig.
Ich habe es bei mir am Rechner als Standardeinstellung, deshalb habe ich nicht daran gedacht.

Sorry

Biber
Bitte warten ..
Mitglied: zweehh
29.04.2008 um 22:03 Uhr
Hallo Biber,

ich hab zwischen zeitlich aufgegeben und die Dateien per Hand geändert. Nun packt mich doch noch mein Ergeiz und ich würd gern wissen wie es geht.

Momentan habe ich batch.bat folgenden Zeilen:

@echo off & setlocal EnableDelayedExpansion
FOR /F "delims=" %%i in ('dir /B E:\test\*.txt') do (
FOR /F "delims=" %%j in ("%%~i") do set "line=%%j" & echo !line:"=!
)

Wenn ich Batch.bat nun aufrufe, erscheint jedoch nur der Name der entsprechenden Textdateien im Verzeichnis. Die Anführungszeichen aus den Dateien werden jedoch nicht gelöscht.

Was mach ich falsch?

Grüße ZweeHH
Bitte warten ..
Mitglied: Biber
29.04.2008 um 22:59 Uhr
Moin zweeHH,

ich hab zwischen zeitlich aufgegeben und die Dateien per Hand geändert.
Das tut mir leid.
Nun packt mich doch noch mein Ergeiz und ich würd gern wissen wie es geht.
Das wiederum finde ich gut.
Was mach ich falsch?
Hmm - eigentlich machst Du nur den beliebtesten Programmierer-Fehler:
Du gehst bei irgendwo im Internet geposteten Schnipseln davon aus, dass sie weniger als zwei Fehler pro Zeile enthalten und dass Du nach einem schnellen Copy & Paste heute mal zeitig Feierabend machen kannst....

Okay, das ist wirklich nicht so - ich habe in dem (wieder mal!) nicht getesteten Anderthalbzeiler gleich mehrere Bugs versteckt.

Aber jetzt hab ich die Zeile wenigstens mal vom CMD-Prompt aus getestet und behaupte bis auf weiteres:

Funktionierende Version:
01.
@echo off & setlocal EnableDelayedExpansion 
02.
FOR /F "delims=" %%i in ('dir /B E:\test\*.txt') do ( 
03.
FOR /F "usebackq delims=" %%j in ("%%~i") do set "line=%%j" & echo !line:"=! 
04.
)
Diese eine ergänzte Option "usebackq" bewirkt, dass die Anführungszeichen in der zweiten FOR /F -Anweisung nicht als Wort-Begrenzer gewertet (und entfernt) werden, sondern dass diese Anführungszeichen in diesem Fall mit zu dem Namen einer Datei gehören.

Etwas weniger abstrakt ein Beispiel am CMD-Prompt:
01.
>for /f  %i in ("x.txt") do @echo %i 
02.
x.txt 
03.
 
04.
>for /f "usebackq" %i in ("x.txt") do @echo %i 
05.
06.
800 
07.
TERRAIN 
08.
BASE_TEX_NOWRAP
Im ersten Fall wird "x.txt" einfach nur als Text blind durchgereicht... ich hätte ebensogut ein "Hallo" oder ein "Merkel" statt "x.txt" verwenden können.

Im zweiten Fall wird dagegen nach dem Inhalt von "x.txt", also nach einer Datei x.txt gesucht.
Und die paar enthaltenen Zeilen Inhalt angezeigt (s.o.).

Wenn keine Datei da wäre, dann wäre das Ergebnis:
01.
>for /f "usebackq" %i in ("y.txt") do @echo %i 
02.
Die Datei "y.txt" kann nicht gefunden werden.
Und das ich überhaupt Anführungszeichen um alle Dateiangaben herumgewickelt habe ist in den vielen Windows-Pfad- und Dateinamen begründet, die "Leerzeichen im Namen" haben.
Diese müssen bei fast allen CMD-Befehlen in Anführungszeichen gesetzt werden, um als "ein Parameter aus mehreren Worten bestehend" erkannt zu werden.

Grüße
Biber
Bitte warten ..
Mitglied: zweehh
30.04.2008 um 08:56 Uhr
Hallo Biber,

vielen Dank für die Geduld. Zeitig Feierabend wäre schön.

Ich habe nochmal den geposteten Schnipsel kopiert und es läuft.
Er gibt die entsprechenden Zeilen auf dem Bildschirm ohne ANfürhungszeichen aus.

Nun müßte ich nochmals dumm fragen, wie er es direkt in die Datei schreibt.

Grüße ZweeHH
Bitte warten ..
Mitglied: Biber
30.04.2008 um 10:10 Uhr
Moin zweeHH,

"wie er es in direkt in die Datei schreibt" ist nicht ganz die richtige Formulierung.
In dieselbe Datei schreiben geht nicht bzw,. nur über den kleinen Umweg, erst eine neue Datei zu erzeugen und diese dann unter dem ursprünglichen Namen zu speichern.
--> Aber das machen wir erst, wenn alles stabil läuft.

Der jetzt sinnvolle Schritt --> Für jede "Quelldatei*.txt" eine "Quelldatei*_OA.txt erzeugen.

01.
@echo off & setlocal EnableDelayedExpansion 
02.
FOR /F "delims=" %%i in ('dir /B E:\test\*.txt') do ( 
03.
FOR /F "usebackq delims=" %%j in ("%%~i") do ( 
04.
         set "line=%%j"  
05.
         echo !line:"=! >>"%%~dpni_OA.txt" 
06.
))
Die Ergänzung >>"%%~dpni_OA.txt" heißt übersetzt:
Löse von der Variablen %%i die Details d,p,n (Drive, Path, Name) auf und hänge "_OA.txt" an.
Und dahin (also z.B "E:\Test\QuelldateiXy_OA.txt") leite die Bildschirmausgabe um.

So in etwa wäre die Skizze... ob Du die Dateien-ohne-Anführungszeichen nun im selben Verzeichnis anlegst
oder im %Temp%-Verzeichnis und ob der Zusatz "_OA" sinnvoll bzw. ästhetisch ist....
.... das ist sicherlich nochmal zu überdenken.

Ich würde wahrscheinlich alle Quelldateien ("E:\test\*.txt") unverändert lassen und alle Dateien ohne Anführungszeichen unter demselben Namen in ein anderes Verzeichnis schreiben.

Bsp: alle "neuen" Dateien nach "E:\Test\OhneAnf" schreiben:
01.
@echo off & setlocal EnableDelayedExpansion 
02.
FOR /F "delims=" %%i in ('dir /B E:\test\*.txt') do ( 
03.
FOR /F "usebackq delims=" %%j in ("%%~i") do ( 
04.
         set "line=%%j"  
05.
         echo !line:"=! >>"E:\Test\OhneAnf\%%~nxi" 
06.
))
[wobei das Ziel-Verzeichnis vorher da sein sollte]

Grüße
Biber
Bitte warten ..
Mitglied: zweehh
30.04.2008 um 11:38 Uhr
Hallo Biber,

danke für die Erläuterung zu ~dpn. Habe ich jetzt verstanden.
Leider klappt es mit der Umleitung in die neue Datei noch nicht.
Die Ausgabe erscheint lediglich auf dem Bildschirm ...

xxxxx >>"E:\test\dateiname_OA.txt"

xxx ist die entsprechende Textzeile aus der Datei ohne Anführungszeichen

Eine neue Datei wird nicht erzeugt und somit auch keine Text ohne Anführungszeichen.

Grüße
Bitte warten ..
Mitglied: Biber
30.04.2008 um 12:14 Uhr
Moin zweeHH,

keine Angst, wir tasten uns näher ran....
Die CMD.exe kommt jetzt mit der Anzahl Anführungszeichen un der Echo-Zeile durcheinander
Bitte ergänze/ändere die Zeile
echo !line:"=! >>"E:\Test\OhneAnf\%%~nxi"

entweder so:
(echo !line:"=!) >>"E:\Test\OhneAnf\%%~nxi"

- oder so:
>>"E:\Test\OhneAnf\%%~nxi" (echo !line:"=!)

Grüße
Biber
Bitte warten ..
Mitglied: zweehh
30.04.2008 um 22:22 Uhr
Hallo Biber,

die beiden Zeilen funktionieren leider nicht...

grüße ZweeHH
Bitte warten ..
Mitglied: zweehh
01.05.2008 um 18:38 Uhr
Hallo Biber,

ich glaube ich hab die Lösung.

ich habe die Zeile wie folgt geändert:

echo !line:^"=!>>"E:\Test\neu\%%~nxi"

ich bin mir nicht ganz sicher was das ^ bedeutet, aber es funktioniert.

Ich möchte mich nochmals für die Geduld bedanken!

Grüße ZweeHH
Bitte warten ..
Mitglied: Biber
01.05.2008 um 22:08 Uhr
Moin zweeHH,
echo !line:^"=!>>"E:\Test\neu\%%~nxi":

ich bin mir nicht ganz sicher was das ^ bedeutet, aber es funktioniert.
Das Caret ("^") dient am CMD-Prompt als Maskierungszeichen für Steuerzeichen.
Etwas platter ausgedrückt: Damit sagst Du der CMD.exe: "Das nächste Zeichen mimm als normalen Buchstaben ohne tiefere Bedeutung".
Ich möchte mich nochmals für die Geduld bedanken!
Gern geschehen. Ich unterstütze auch gern, wenn der Frsgesteller selbst so viel "mitarbeitet", wie Du es getan hast. Danke auch für deine Geduld.

Noch eine letzte ungetestete Alternative, die eigentlich auch funktionieren müsste, wie alle anderen geposteten Varianten auch:
01.
... 
02.
         set "line=%%j" 
03.
         Set line=%line:"=%  
04.
         echo !line:!>>"E:\Test\OhneAnf\%%~nxi" 
05.
....
Grüße
Biber
Bitte warten ..
Ähnliche Inhalte
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 ...

Batch & Shell

Zeilenumbrüche in mehreren Dateien eines Ordners entfernen

gelöst Frage von TranministratorBatch & Shell2 Kommentare

Hallo liebe Admins, habe folgenden Code welcher ganz gut funktioniert und alle Zeilenumbrüche EINER bestimmten Datei entfernt. Jetzt ist ...

Batch & Shell

Mit PowerShell mehrere Sonderzeichen aus einer XML datei entfernen

gelöst Frage von GeretConditBatch & Shell2 Kommentare

Hallo meine Lieben mit Administratoren, ich musste vor kurzem ein kleines PowerShell Script verfassen um ein bestimmtes Sonderzeichen aus ...

Batch & Shell

Leerzeichen aus mehreren Dateien entfernen und durch ein Munis ersetzen

gelöst Frage von sports-boxBatch & Shell3 Kommentare

Hallo, ich habe einen Ordner mit Dateien, wo jede Datei einen anderen Namen hat. Diese Dateinamen enthalten ein Leerzeichen, ...

Neue Wissensbeiträge
CPU, RAM, Mainboards
Neverending story
Tipp von keine-ahnung vor 18 StundenCPU, RAM, Mainboards1 Kommentar

Da kommt man mit dem fixen gar nicht mehr hinterher und die CPU erreichen wieder Rechenleistungen im Bereich des ...

Multimedia & Zubehör
AVM Fritz USB WLAN Sticks schneller einschalten
Tipp von NetzwerkDude vor 2 TagenMultimedia & Zubehör4 Kommentare

Die AVM Fritz WLAN Sticks haben in der Firmware 2 Modis: Einmal als Massenspeicher und einmal als WLAN Netzwerkkarte ...

Windows Server

Windows Server Backup schlägt fehl - Lösung 2008-2016

Tipp von BiGnoob vor 2 TagenWindows Server

Hi zusammen , ich möchte gerne einen Lösungstipp abgeben für folgenden Fehler: Lösung ist folgende:

Humor (lol)
Telekom vs. O2 - 3:2
Erfahrungsbericht von the-buccaneer vor 3 TagenHumor (lol)4 Kommentare

Unglaublich aber wahr: Nachdem mein privater Anschluss am 19.04.18 auf VOIP und VDSL umgestellt wurde, hatte ich seitdem 1,5 ...

Heiß diskutierte Inhalte
PHP
Nach Umzug zu 1und1 bekomme ich beim Eintrag in die DB Tabelle folgenden Fehler
gelöst Frage von jensgebkenPHP35 Kommentare

INSERT command denied to user 'dbo45342345342231244'@'112.127.102.073' for table 'orders'

Rechtliche Fragen
DSGVO - Impressum und Datenschutz auf Anmeldeseiten notwendig?
Frage von StefanKittelRechtliche Fragen16 Kommentare

Hallo, was mit gerade eingefallen ist. Muss man auf Anmeldeseiten auch ein Impressum und Datenschutzhinweis haben? Auch hier wird ...

Windows Userverwaltung
Problem mit Benutzerprofil
Frage von lieferscheinWindows Userverwaltung12 Kommentare

Guten Tag liebe Community, folgendes Problem habe ich: User meldet sich auf Client A an - sein Homelaufwerk verbindet. ...

Windows Server
2003er RDS Server lässt alten ThinClient nach Updates nicht mehr anmelden
Frage von KnorkatorWindows Server9 Kommentare

Hallo zusammen, wir hatten die Aufgabe, ein System (keine Domänenanbindung) zu virtualisieren welches mehrere Jahre keine Updates gesehen hat. ...