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

Findstr stolpert über das UND Zeichen

Frage Entwicklung Batch & Shell

Mitglied: RaidMan

RaidMan (Level 1) - Jetzt verbinden

28.02.2014, aktualisiert 19:20 Uhr, 1724 Aufrufe, 13 Kommentare

hallo und guten Abend,

habe mir eine Batch datei gebaut zum umsortieren und korrigieren von Textdateien, das funktioniert auch soweit,
aber wen in der Variablen für "Pfad\Datei" ein & enthalten ist interpretiert findstr das & als Befehlsteil und versagt den Dienst

Was kann ich tun damit ein & im Pfad/Dateinamen, von findstr verarbeitet wird?

also:
set file="G:\Das Verzeichnis\mein ein & alles\jungens.txt"
findstr liebe %file% =FEHLER



hmmm sorry scheint doch nicht am "&" zu liegen
habe testweise das & rausgenommen hat nichts geändert hängt sich nach wie vor an der/den Dateien auf ???
Mitglied: Sheogorath
28.02.2014 um 19:58 Uhr
Moin,

was dir fehlt sind Anführungszeichen. bzw. du solltest die woanders hinsetzen. So sollte es klappen:
01.
set "file=G:\Das Verzeichnis\mein ein & alles\jungens.txt" 
02.
findstr /C:"liebe" "%file%"
Gruß
Chris
Bitte warten ..
Mitglied: RaidMan
28.02.2014, aktualisiert um 23:17 Uhr
Hallo Chris und alle Anderen
Danke für deine Antwort
aber es gibt da leider noch mehrere Probleme mit dem "&"

hier der erste Teil wo es hakt
01.
FOR /f "delims=" %%i IN ('FINDSTR . %quell_datei%') DO ( 
02.
SET zeile=%%i &CALL :ersetzen !zeile! 
03.
04.
GOTO :weiter 
05.
 
06.
:ersetzen 
07.
REM innerhalb der Variable "zeile" ersetzen 
08.
SET zeile=!zeile:%gesucht01%=%ersetze01%!
%%i zeigt die ganze Zeile mit dem &

dies hier
01.
SET zeile=!zeile:%gesucht01%=%ersetze01%!
funktioniert nicht wenn ein & in %zeile% enthalten ist
denn die %zeile% ist anschließenf leer

wie kann man das lösen?
Bitte warten ..
Mitglied: bastla
28.02.2014 um 22:30 Uhr
Hallo RaidMan!

Glaub Chris doch, wenn er Dir Anführungszeichen empfiehlt ...
01.
FOR /f "delims=" %%i IN ('FINDSTR . "%quell_datei%"') DO ( 
02.
    SET "zeile=%%i" & CALL :ersetzen 
03.
04.
GOTO :weiter 
05.
 
06.
:ersetzen 
07.
REM innerhalb der Variable "zeile" ersetzen 
08.
SET "zeile=!zeile:%gesucht01%=%ersetze01%!" 
09.
goto :eof
Grüße
bastla

P.S.: ... und findest Du nicht auch, dass ein Batch mit passender Formatierung (lässt sich auch nachträglich hinzufügen) gleich viel besser aussieht?
Bitte warten ..
Mitglied: RaidMan
28.02.2014, aktualisiert um 23:48 Uhr
hey Ihr

an keiner Stelle habe ich behauptet " machen keinen Sinn, allerdings sollte man schon wissen was man tut ;)
also ich hatte da schon etliche Varianten erfolglos probiert, dein jetziger Vorschlage war bereits darunter.
Es bleibt dabei, wenn %zeile% ein & enthält funktioniert das ersetzen nicht mehr und es gibt eine leere Zeile zurück

01.
FOR /f "delims=" %%i IN ('FINDSTR . "%quell_datei%"') DO ( 
02.
echo 1 %%i 
03.
SET "zeile=%%i" &CALL :ersetzen      rem !zeile! 
04.
pause 
05.
06.
 
07.
GOTO :weiter 
08.
 
09.
:ersetzen 
10.
REM innerhalb der Variable "zeile" ersetzen 
11.
echo 2 %zeile% 
12.
SET "neuzeile=!zeile:%gesucht01%=%ersetze01%!" 
13.
SET "neuzeile=!zeile:%gesucht02%=%ersetze02%!" 
14.
SET "neuzeile=!zeile:%gesucht03%=%ersetze03%!" 
15.
SET "neuzeile=!zeile:%gesucht04%=%ersetze04%!" 
16.
echo 3 %neuzeile% 
17.
pause 
18.
 
19.
REM Inhalt der Variable "zeile" in die Ausgabedatei schreiben 
20.
IF [!zeile!] EQU [] (ECHO.>>"%ziel_datei%") ELSE (ECHO !zeile!>>"%ziel_datei%") 
21.
GOTO :eof 
22.
 
23.
:weiter 
24.
 
so sieht der jetzt Teil aus, funktioniert aber leider immer noch nicht s.o.
bei einer %zeile% ohne & wird bei den Echos 1-3 jeweil der string ausgegeben

bei einer %zeile% mit & wird nur bei dem Echos 1 der string ausgegeben
ECHO 2+3 zeigen dann nichts
Bitte warten ..
Mitglied: bastla
01.03.2014 um 01:48 Uhr
Hallo RaidMan!
an keiner Stelle habe ich behauptet " machen keinen Sinn, allerdings sollte man schon wissen was man tut ;)
Behauptet nicht, aber verwendet hast Du sie auch nicht (oft genug) ...
01.
FOR /f "delims=" %%i IN ('FINDSTR . "%quell_datei%"') DO ( 
02.
    echo 1 "%%i" 
03.
    SET "zeile=%%i" & CALL :ersetzen 
04.
    pause 
05.
06.
 
07.
GOTO :weiter 
08.
 
09.
:ersetzen 
10.
REM innerhalb der Variable "zeile" ersetzen 
11.
echo 2 %zeile% 
12.
echo 2 "%zeile%" 
13.
echo 2 !zeile! 
14.
SET "neuzeile=!zeile:%gesucht01%=%ersetze01%!" 
15.
SET "neuzeile=!zeile:%gesucht02%=%ersetze02%!" 
16.
SET "neuzeile=!zeile:%gesucht03%=%ersetze03%!" 
17.
SET "neuzeile=!zeile:%gesucht04%=%ersetze04%!" 
18.
echo 3 %neuzeile% 
19.
echo 3 "%neuzeile%" 
20.
echo 3 !neuzeile! 
21.
pause 
22.
 
23.
REM Inhalt der Variable "zeile" in die Ausgabedatei schreiben 
24.
ECHO(!neuzeile!>>"%ziel_datei%" 
25.
GOTO :eof 
26.
 
27.
:weiter 
28.
type "%ziel_datei%"
Anmerkung zur Zeile 24:
Abgesehen davon, dass Du vermutlich !neuzeile! in die Zieldatei schreiben möchtest, brauchst Du auf Leerzeilen hier keine Rücksicht zu nehmen, da in der for-Schleife Leerzeilen ohnehin ignoriert werden. Trotzdem habe ich eine Schreibweise gewählt, mit der auch Leerzeilen ausgegeben würden, wobei anstelle der Klammer (diese wird von @jeb-the-batcher empfohlen) auch "." oder "\" oder "+" oder verschiedene weitere Zeichen dafür sorgen würden, dass kein ECHO ist eingeschaltet (ON). ausgegeben wird.

Grüße
bastla
Bitte warten ..
Mitglied: RaidMan
01.03.2014, aktualisiert um 10:45 Uhr
Moin zusammen, Hi bastla

hmmm wie es scheint bzw was ich jetzt hier rauslese ist
ECHO ein Befehl der Textausgaben zeigen soll,
kann einige Zeichen wie sie in jedem beliebigen Text vorkommen können schlicht nicht weiter verarbeiten!?

oh man das ist wieder MS Sch...
Oh Herr erlöse die Welt von der MS Geißel und lass bald einen intelligenten nicht geldgeilen Menschen ein sinniges OS erstellen

Welche Zeichen sind es denn konkret, die Echo nicht kann?
so ein Käse ich hatte die Batch shon auf etliche Verzeichnisse lossgelassen,
die Dateien kann ich jetz alle manuell prüfen was da kaputt ist, schönen Dank aber auch!
Ich wollte mal schnell aufräumen und jertzt steh ich erstmal vor Schadensbegrenzung!
Das heißt ja Batches für windows Filesystem wo "&" auch schon lange verwendet wird sind alle riskant bis untauglich?

Ist dieses %Magicecho% die einzige Lösung?
Also jede Batch die Filenamen oder Text irgendwie mit ECHO verarbeitet braucht %MagicEcho%

Gibt es einen vernünftigen Batchersatz ohne die MS Krankheiten?
Bitte warten ..
Mitglied: bastla
01.03.2014, aktualisiert um 12:50 Uhr
Hallo RainMan!
ich hatte die Batch shon auf etliche Verzeichnisse lossgelassen
Optimismus in Ehren, aber einen un- bzw nicht ausreichend getesteten Batch lasse ich nicht mal auf 2 Dateien los, geschweige denn auf etliche Verzeichnisse ...
ECHO ein Befehl der Textausgaben zeigen soll,
kann einige Zeichen wie sie in jedem beliebigen Text vorkommen können schlicht nicht weiter verarbeiten!?
Das stimmt so nur bedingt (wie die Beispiele oben Dir eigentlich zeigen sollten) - abgesehen davon ist allerdings (CMD) Batch hinsichtlich der Manipulation von Text tatsächlich etwas beschränkt im Vergleich zu anderen Scriptsprachen wie VBS oder PowerShell ...
Welche Zeichen sind es denn konkret, die Echo nicht kann?
Es geht nicht darum, dass echo die Sondrezeichen &|<> nicht "könnte", sondern dass diese eben in CMD eine besondere Bedeutung haben - damit sie als "gewöhnliche" Zeichen verstanden (und daher nicht "interpretiert") werden, kannst Du sie - erraten - unter Anführungszeichen setzen oder eben per delayedExpansion (und dann mit der Variablenschreibweise !neuzeile! anstatt %neuzeile%) verwenden beziehungsweise, wenn sie direkt ausgegeben werden sollen, durch Voranstellen eines ^ "escapen".
Das heißt ja Batches für windows Filesystem wo "&" auch schon lange verwendet wird sind alle riskant bis untauglich?
... außer Du machst es richtig (für Dateioperationen brauchst Du ja ohnehin kein echo) ...
Was Du übrigens mit %Magicecho% meinst weiß ich zwar nicht, aber in vielen Fällen reicht die vorhin beschriebene Vorgangsweise und in anderen Fällen greife ich ( @colinardo zB ist mehr up to date und tendiert daher zur PowerShell ) zu VBS.

Grüße
bastla
Bitte warten ..
Mitglied: RaidMan
01.03.2014, aktualisiert um 13:37 Uhr
Hallo bastla,

ehrlich gesagt bin ich absoluter Gelegenheit-batchschreiber und mit den so wichtigen Feinheiten nicht vertraut,
allein der Unterschied % " ! ist mit schon nicht wirklich klar

Optimismus in Ehren, aber einen un- bzw nicht ausreichend getesteten Batch
na ich hatte schon etliche Tests aber eben ohne ein "&"

Was Du übrigens mit %Magicecho% meinst weiß ich zwar nicht
so nannte "jeb the batcher" sein "hilfscode" auf den du velinkt hast
Bitte warten ..
Mitglied: pieh-ejdsch
01.03.2014, aktualisiert 02.03.2014
Moin,

echo macht genau was es soll und die Befehlszeile wird auch genaus so ausggeführt, wie erwartet. manche Zeichen sind Steuerzeichen und verhalten sich in einer in Prozentzeichen aufgelösten Variable wie sie in die Variable eingegeben wurden.
Nur werden häufig beim setzen der Variable diese mit Anführungszeiche3n versehen aber beim Echo wieder "vergessen".
Ausnahmen bilden da nur Laufvariablen von Forschleifen bzw Mit Verzögerter Variablenauflösung in Ausrufezeichen gesetzte Variablen.

Daher sollten bei hohen Datenmengen allen Daten ein gewisser Satz als Testdaten genommen und auch angesehen werden. Also Kopien erzeugt werden bzw im Supergau die Datensicherung zurückspielen.

Wenn eine leere Variable durch ersetzung verändert wird, kommt Grütze raus.
Daher bei Leerzeilenmitnahme immer sicherstellen, das vor einer zu ersetzenden Variable immer etwas drin ist.
Ob danach noch Inhalt in der Variable ist spielt keine Rolle.
01.
echo on 
02.
setlocal disabledelayedexpansion 
03.
set "Quelldatei=G:\Das Verzeichnis\mein ein & alles\jungens.txt" 
04.
set "suche=Rein" 
05.
set "ersetz=Raus" 
06.
set "T=%temp%\tmp.txt" 
07.
findstr /n "^" "%Quelldatei%" >"%t%" 
08.
call :Out 3>"%Quelldatei%-kopie.txt" 
09.
exit /b 
10.
:Out 
11.
for /f "usebackq delims=" %%i in ("%t%") do (set Line=%%i 
12.
  setlocal enabledelayedexpansion 
13.
  set "Line=!Line:%suche%=%ersetz%!" 
14.
  >&3 echo(!Line:*:=! 
15.
  endlocal 
16.
17.
exit /b
Gruß Phil
Bitte warten ..
Mitglied: RaidMan
01.03.2014, aktualisiert um 15:12 Uhr
hallo zusammen

danke für Eure Hilfe
gestern stand ich noch am progiertechnischen Abgrund, jetzt bin ich einen Schritt weiter ;)

Also: das Hauptproblem ist jetzt das ersetzen der Teilstrings

01.
 set "Line=!Line:%suche%=%ersetz%!" 
liefert eine leeren string zurück wenn !line! eine Zeichenfolge mit & enthält

01.
set "suche=Auto" 
02.
set "ersetz=Bahn" 
03.
 
04.
set "line=ich fahre Auto + Fahrrad" 
05.
set "Line=!Line:%suche%=%ersetz%!" 
06.
echo !line! = ich fahre Bahn + Fahrrad 
07.
 
08.
set "line=ich fahre Auto & Fahrrad" 
09.
set "Line=!Line:%suche%=%ersetz%!" 
10.
echo !line! = 
raidman
Bitte warten ..
Mitglied: pieh-ejdsch
01.03.2014 um 16:04 Uhr
wenn ein echo in die Datei erfolgt ist sowieso kein text zu sehen.
Was für eine CMD-Version benutzt Du?

Gruß Phil
Bitte warten ..
Mitglied: bastla
01.03.2014 um 19:11 Uhr
Hallo PH!
Was für eine CMD-Version benutzt Du?
Die von XP dürfte es nicht sein - auch damit sieht das nämlich so aus:
D:\>type Ersetzen.cmd 
@echo off & setlocal enabledelayedexpansion 
set "suche=Auto" 
set "ersetz=Bahn" 
 
set "line=ich fahre Auto + Fahrrad" 
set "Line=!Line:%suche%=%ersetz%!" 
echo !line! = ich fahre Bahn + Fahrrad 
 
set "line=ich fahre Auto & Fahrrad" 
set "Line=!Line:%suche%=%ersetz%!" 
echo !line! = ich fahre Bahn ^& Fahrrad 
 
D:\>Ersetzen 
ich fahre Bahn + Fahrrad = ich fahre Bahn + Fahrrad 
ich fahre Bahn & Fahrrad = ich fahre Bahn & Fahrrad 
 
D:\>
Ich schau mal, ob ich noch ein W2000 zum Testen auftreibe ...

Grüße
bastla
Bitte warten ..
Mitglied: RaidMan
01.03.2014, aktualisiert um 19:46 Uhr
guten Abend und hallo zusammen,

@bastla
oh vielen dank aber die Aktion kannst du dir sparen

das Problem hat scheinbar die ganze Zeit blind vor dem Monitor gesessen
nach dem ich noch einmal alles neu geschrieben habe funktioniert die Batch plötzlich

was doof ist, ich habe nicht raus gefunden wo ich den Fehler gemacht hatte
ohhh raidman was für ne Pleite

Aber ihr habt mir ja sehr beharlich Unterstützung gewährt dafür ein ganz dickes Danke

Also jetzt tut die batch was sie soll, übrigens auf einem XP Rechner ;)

Allen ein schönes rest WE
wünscht raidman


hier mal der ganze Teil der Sektion Zeilen ändern

01.
@ECHO off 
02.
SETLOCAL enabledelayedexpansion 
03.
 
04.
rem braucht Quell-Pfad als %1  
05.
rem und Quell-Verzeichnis als %2 
06.
 
07.
FOR /f "delims=" %%a IN ('dir /b "%~1%~2\*.url"') DO ( 
08.
set "quell_datei=%~1%~2\%%a" 
09.
10.
set "ziel_datei=%quell_datei:~0,-3%txt"	 
11.
 
12.
SET "gesucht01=Full			*" 
13.
SET "ersetze01=originalName		*" 
14.
SET "gesucht02=Name			*" 
15.
SET "ersetze02=clean-Name		*" 
16.
SET "gesucht03=Name2		*" 
17.
SET "ersetze03=given-Name		*" 
18.
SET "gesucht04=Date			*" 
19.
SET "ersetze04=createDate		*" 
20.
 
21.
REM Quell-Datei zeilenweise auslesen  
22.
REM und in Variable "zeile" schreiben	 
23.
rem setlocal enabledelayedexpansion  
24.
 
25.
FOR /f "delims=" %%i IN ('FINDSTR . "%quell_datei%"') DO ( 
26.
SET "zeile=%%i"  
27.
CALL :ersetzen  
28.
29.
GOTO :weiter 
30.
 
31.
:ersetzen 
32.
REM innerhalb der Variable "zeile" ersetzen 
33.
SET zeile=!zeile:%gesucht01%=%ersetze01%! 
34.
SET zeile=!zeile:%gesucht02%=%ersetze02%! 
35.
SET zeile=!zeile:%gesucht03%=%ersetze03%! 
36.
SET zeile=!zeile:%gesucht04%=%ersetze04%! 
37.
REM Inhalt der Variable "zeile" in die Ausgabedatei schreiben 
38.
IF [!zeile!] EQU [] (ECHO.>>"%ziel_datei%") ELSE (ECHO !zeile!>>"%ziel_datei%") 
39.
GOTO :eof 
40.
 
41.
:weiter 
42.
del "%quell_datei%" 
43.
move /y "%ziel_datei%" "%quell_datei%" 
44.
 
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
gelöst Findstr - code für schwieriger Abfrage gesucht (9)

Frage von reissaus73 zum Thema Batch & Shell ...

VB for Applications
gelöst VBA Text mit Format übertragen und Zeichen ergänzen (11)

Frage von Dau12345 zum Thema VB for Applications ...

Batch & Shell
gelöst Mal eine neue Art von Abfrage mit findstr (8)

Frage von DaTobsn zum Thema Batch & Shell ...

Batch & Shell
gelöst Dos-Box, seltsame(s) Zeichen - Was und woher? (6)

Frage von Franz-Josef-II zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (22)

Frage von patz223 zum Thema Windows Userverwaltung ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (19)

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

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...