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
GELÖST

in mehreren Dateien Anführungszeichen entfernen

Frage Entwicklung Batch & Shell

Mitglied: zweehh

zweehh (Level 1) - Jetzt verbinden

27.04.2008, aktualisiert 01.05.2008, 6564 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 ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
gelöst Powershell: Dateien nach Version löschen in mehreren Ordnern (4)

Frage von ImmerKind zum Thema Batch & Shell ...

Debian
Debian Zugriff auf gelöschte Dateien entfernen (6)

Frage von kaihummels zum Thema Debian ...

Grafik
gelöst Tif-Dateien mit mehreren Frames drehen (15)

Frage von imebro zum Thema Grafik ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...