Anfuehrungszeichen in einer Batchdatei

Mitglied: Muddi

Muddi (Level 1) - Jetzt verbinden

23.08.2006, aktualisiert 11.09.2006, 4216 Aufrufe, 15 Kommentare

Hallo,

Ich habe folgendes Problem:

@echo off
set find=%SystemRoot%\System32\find.exe
echo datei.txt|%find% "(Anfuerungszeichen)" >nul

rem Die Batch soll in der datei.txt nach Anführungszeichen suchen.
if errorlevel 1 (mach irgendwas)

rem Wenn er nicht fündig wird, soll eben etwas geschehen.
rem Das Problem ist, dass man hinter %find% keine 3 Anführungszeichen stehen lassen kann.
pause
exit

rem Ist es irgendwie möglich, über den ASCII-Code von (") das (") anzusprechen. Der Code ist glaub ich 34.

Ich hoffe, jemand hat die Lösung.

Gruß
Muddi
Mitglied: DaSam
23.08.2006 um 19:39 Uhr
find /I """" \test.txt findet bei mir das Anführungszeichen.

cu,
Alex
Bitte warten ..
Mitglied: Biber
23.08.2006 um 23:40 Uhr
Moin Muddi,
dass man hinter %find% keine 3 Anführungszeichen stehen lassen kann..
Wie DaSam geschrieben hat - dann nimm doch vier davon.

2 davon umschließen den Suchtext.
1 ist der Suchtext. Und das muss eben als 2 Anführungszeichen übergeben ("maskiert") werden.

Wenn das nicht einleuchtet:
Bei der etwas mehr *nix-artigen Variante "FindStr.exe" kannst Du auch explizit nach Sonderzeichen und Hex-Werten suchen. Siehe FindStr /?.

Gruß
Biber
Bitte warten ..
Mitglied: Muddi
24.08.2006 um 12:40 Uhr
OK, danke.
Alles klar.

Aber ich habe noch ne Frage zu den Batchdateien, wollte nicht extra nochmal nen Thread aufmachen. Also:
Ich habe einen Ordner (meinverzeichnis) in dem sind wieder weitere Ordner, die ich nicht kenne, die anzahl kenne ich auch nicht, aber es ist mindestens einer:
ordner1
ordner2
ordner3
ordnern

@echo off
cd %systemdrive%\meinverzeichnis
dir
rem Jetzt kommen ja alle Ordner und Dateien in dem Ordner.
rem Wie kann man allen Ordnern eine Variable zuweisen.
rem dass nachher a=ordner1 b=ordner2 usw...
rem Warscheinlich eine for-Schleife, oder?

Gruß,
Muddi
Bitte warten ..
Mitglied: DaSam
24.08.2006 um 19:29 Uhr
Das macht man mit dem Parameter /d in einer for-Schleife. Beispiel:

for /d %i in (*.*) do echo %i

Alledrings hast Du dann immer alles in %i drinstehen und nicht in a... (Was machst Du, wenn es mehr als 26 Verzeichnisse gibt ??? Und was machst Du dann weiter mit deinen Variablen a... ???)

cu,
Alex
Bitte warten ..
Mitglied: Muddi
24.08.2006 um 20:12 Uhr
Alledrings hast Du dann immer alles in %i
drinstehen und nicht in a... (Was machst Du,
wenn es mehr als 26 Verzeichnisse gibt ???
Und was machst Du dann weiter mit deinen
Variablen a... ???)

Also das Programm sucht in dem Ordner (je nach Pc ist das %systemdrive%\Programme\Steam\SteamApps
nach den registrierten Accounts, die alle einen Ordner haben. Der User gibt anschließend an, in welchen Account bestimmte Dateien, also Karten, Skins usw... kopiert werden sollen.
Und mehr als 26 Accounts wird es nicht geben.:-) face-smile
Bitte warten ..
Mitglied: Biber
27.08.2006 um 20:54 Uhr
Hmm, wohl wahr, Muddi,

dass kein User mehr als 26 Accounts haben wird.
Aber wegen der Les- und Wartbarkeit des Batchschnipsels würde ich DaSam's Ansatz eher so variieren:

Danach hast Du alle Accounts in Umgebungsvariablen %SteamAccount1% bis %SteamAccountNN% und kannst alles haönwegs nachvollziehbar im Batch runtertippen.

Gruß
Biber
P.S. Hat aber alles wenig mit "Anführungszeichen im Batch" zu tun.
Darf ich diesen Thread schließen?
Bitte warten ..
Mitglied: Muddi
10.09.2006 um 19:45 Uhr
Hallo Biber,

Sorry, konnte nicht früher antworten, war im Urlaub :D.


GetAllSteamAccounts.bat
@echo off & Setlocal
EnableDelayedExpansion
set /a "AccCnt=0"
for /d %%i in
(%ProgramFiles%\Steam\SteamApps\*.*) do call
:SetNextAccount %%i
goto CopyMoveActions

:SetNextAccount
Set /a "AccCnt+=1"
Set "SteamAccount%AccCnt%=%1"
Goto :eof


Also wenn ich das richtig sehe, ist der Hauptteil nach diesen Zeilen oben vorbei, oder? wegen goto :eof
Aber wenn ich jetzt z.B.
hinzufüge, heißt es nur ECHO ist ausgeschaltet, warum?


For /L %%i in (1,1,%AccCnt%) Do (


Diese Zeile verstehe ich auch noch nicht so ganz.


Sorry wegen meinen Noobfragen

Bitte noch kein Schloss dranhängen, bis das bei mir auch funktioniert.

Grüße
Muddi
Bitte warten ..
Mitglied: Biber
10.09.2006 um 21:19 Uhr
Moin Muddi,

Ich hatte tatsächlich noch einen Fehler drin...
...und zwar in der Zeile if AccCnt==0 (echo Kein Steam-Account gefunden) .
Da fehlten die Prozentzeichen um die Variable %AccCnt%.
Ich habe auch noch mal die Zeilen optisch neu arrangiert, damit deutlicher wird, was der eigentliche Batch ist und was Unterroutine.
Ansonsten liefert der zum Test geänderte folgende Batch-Schnipsel:

...beim Aufruf vom CMD-Prompt folgendes Ergebnis:

Natürlich nur, wenn ich die Struktur richtig verstanden habe und unterhalb von "%programFiles%\Steam\Steamapps" diese Unterverzeichnisse für die User Chappy, Heinzi und c00lm4n existieren.

Also wenn ich das richtig sehe, ist der Hauptteil nach diesen Zeilen oben vorbei, oder? wegen goto :eof
Aber wenn ich jetzt z.B.
echo %SteamAccount1%

hinzufüge, heißt es nur ECHO ist ausgeschaltet, warum?

Weil keine Variable %SteamAccount1 gesetzt wurde. Dann ist die Verzeichnisstruktur anders, als ich es verstanden habe.
Bei mir liefert [%programFiles% ist bei mir D:\Programme, wie ja auch im Batch-Output angezeigt wird] die folgenden Unterverzeichnisse
Und bei dir?

For /L %%i in (1,1,%AccCnt%) Do (

Diese Zeile verstehe ich auch noch nicht so ganz.

In %AccCnt% (also in der Variablen AccountCount, aber der Name war mir zu lang) steht die Anzahl der gefundenen SubDirs. Bei mir 3.
Also wird die Zählschleife
"For /L %%i in (1,1,%AccCnt%) Do (.."
übersetzt zu
For /L %%i in (1,1,3) Do (...
--> also vom Anfangswert 1 (erster Parameter) immer erhöht um 1 (zweiter Parameter) bis zum Endwert 3 (dritter Parameter) das getan, was nach dem "DO.." folgt.

Bitte probiers noch mal mit der einen Korrektur bzw. poste mal das DIR-Ergebnis.

Gruß
Biber
Bitte warten ..
Mitglied: Muddi
11.09.2006 um 11:22 Uhr
Moin,

Biber, du bist genial! Es geht!

Die meisten Leute haben Steam unter %programfiles%\Steam installiert oder, so wie ich, unter %programfiles%\valve\steam

%programfiles% ist bei mir c:\programme

Das Valve hab ich dann noch hinzugefügt. Ergebnis:


Bei der Batch ich hab sie mal so geschrieben:


Output:

Er findet Sie also. OK letzte Frage :) face-smile

Wie macht man das jetzt am besten mit der Auswahl, dass außerdem nur der Accountname angezeigt wird (ist aber nicht soo wichtig, wäre aber schöner beim output als immer das c:\programme\valve\steam\usw... vor dem eigentlichen Namen)


Das ist dann aber viel Tipparbeit, bei maximal 26 Accounts :( face-sad

Weißt du eine elegantere Methode?

Gruß
Muddi
Bitte warten ..
Mitglied: Biber
11.09.2006 um 11:58 Uhr
Na siehst Du, muddi,

es wird doch.. ;-) face-wink

Die Skizzen zu den nächsten Verfeinerungen:
a) den SteamAppPath in eine Variable packen, damit nur die Accounts selbst einfacher extrahiert und angezeigt werden können.
b) die Auswahl-Anzeige

DONE Wie macht man das jetzt am besten mit der Auswahl, dass außerdem nur der Accountname angezeigt wird


So, Mittach...

Biber
Bitte warten ..
Mitglied: Muddi
11.09.2006 um 18:20 Uhr
Es geht so gut wie, der ouput sieht nur noch nicht so schön aus. :-) face-smile

Ich habe die beiden Schnipsel mal zusammengeklebt, warscheinlich falsch.


Er frägt nämlich 3 mal nach, welchen Steamaccount man benutzen will.

Beim ersten mal gibt es nur:


Beim zweiten mal:

Beim dritten mal:

Aber bis auf das funktioniert alles. Nach der Wahl ist dann %ThisAccount% Muddi oder franzake und man kann in den Ordner Dateien kopieren.

Schönen Abend noch
Muddi
Bitte warten ..
Mitglied: Biber
11.09.2006 um 19:38 Uhr
Na gut, Muddi,

dann machen wir es mal halbwegs komplett.

So sähe dann der Output bei "richtiger" User-Eingabe aus:

und "keine Ziffer" und "zu große Ziffern" wird auch abgefangen.

Was Du eventuell noch ändern musst, ist der Pfad..
Statt set "SteamAppsPath=%ProgramFiles%\Valve\Steam\SteamApps"
eher so was:

Aber das bekommst Du schon hin... ein bisschen was flimmert ja jetzt schon auf dem Monitor.

BTW - darf ich jetzt den Beitrag auf "Geschlossen" setzen bitte? ;-) face-wink
Gruß
Biber
Bitte warten ..
Mitglied: Muddi
11.09.2006 um 20:55 Uhr
Juhuuuuuuuuuuuuuuuuuuuu, jetzt geht alles perfekt. Bist der beste Biber und danke, dass du dir die Mühe gemacht hast. Das mit dem Steampfad finden hab ich per registry export gemacht, da der Installationspfad im Schlüssel HKLM\Software\Valve\Steam verzeichnet ist.

Ich habe noch eine letzte Frage, die etwas mit Anführungszeichen zu tun hat. Aber wenn du willst kann ich auch einen neuen Thread aufmachen. Also ich habe ein Programm geschrieben, dass die Treiber für Hardwarekomponenten runterlädt, da ich mich bei 3PCs nicht immer durch diese Homepages klicken will, um endlich zum Downloadlink zu kommen. Da hab ich das Tool wget.exe zur Hilfe gezogen.
am Anfang soll das Programm das System analysieren. Dafür habe ich den Registryeintrag

HKEY_LOCAL_MACHINE\Hardware\Description\System\CentralProcessor\0

in eine Textdatei exportiert (CPU.txt), weil es hier um den Prozessor geht. Danach die wichtige Zeile:

"ProcessorNameString"="AMD Sempron(tm) 2800+"

in eine neue Textdatei (CPU_NAME.txt) geschrieben. Dabei soll "AMD Sempron(tm) 2800+" ohne Anführungszeichen ausgelesen werden.
Das Problem bei

for /f "delims=" tokens=3" %%p in (CPU_NAME.txt) do set CPU=%%i
echo Prozessor=%CPU%

ist, dass er dann sofort anbricht.

Gruß
Muddi
Bitte warten ..
Mitglied: Biber
11.09.2006 um 21:08 Uhr
Ich würde das Setzen der Variablen dann so machen:


Also das Gleichheitszeichen als Delimiter und dann das 2. Token nehmen.
Ergebnis am CMD-Prompt:
So, Feierabend für heute.

Biber
Bitte warten ..
Mitglied: Muddi
11.09.2006 um 21:21 Uhr
So, Feierabend für heute.

Ja, du kannst den Thread jetzt zu machen.

Danke für alles und schönen Abend noch
Muddi
Bitte warten ..
Heiß diskutierte Inhalte
Off Topic
Ein Weg weg von Microsoft. Wie würde man es angehen? Lasst uns doch etwas spinnen
it-fraggleVor 1 TagAllgemeinOff Topic53 Kommentare

Guten Morgen Kollegen, es treibt mich schon seit einigen Jahren um, dass es sinnvoll wäre langsam einen Weg weg von Microsoftprodukten zu finden. Mir ...

Hardware
Versorgungsengpass Chips
NebellichtVor 1 TagAllgemeinHardware22 Kommentare

Allg. frage ich mich ja warum Apple auf ARM frühzeitig gesetzt hat. Die Automobilindustrie gerade Absatzprobleme hat, weil keine Chips mehr geliefert werden können. ...

Windows Server
Server 2019 RDS-CALs für Domänen-Admins? Ernsthaft?
gelöst anteNopeVor 1 TagFrageWindows Server7 Kommentare

Nabend zusammen, ich habe hier heute einen RDS auf Basis eines Server 2019 STD installiert und mit User-CALs lizenziert. Soweit funktioniert auch alles. Nur ...

Festplatten, SSD, Raid
Wie würdet ihr eine Datenrettung machen?
pd.edvVor 23 StundenFrageFestplatten, SSD, Raid11 Kommentare

Hallo, ich arbeite gerade an einem Blog-Artikel zum Thema Datenrettung und würde mich brennend interessieren wie Ihr eine Datenrettung angehen würdet. Sagen wir mal ...

Windows Server
Lokaler DNS verlangsamt Internet?
gelöst Rattical84Vor 9 StundenFrageWindows Server20 Kommentare

Hallo zusammen, ich habe hier eine Domäne mit dem Domänencontroller als DNS-Server. Das ist der einzige DC und DNS-Server im Netz. Jetzt habe ich ...

Ubuntu
Installiert auf Rechner
khaldrogoVor 14 StundenFrageUbuntu9 Kommentare

Hallo Leute, Wir haben einen neuen Server bekommen, auf dem wir per Remotedesktopverbindung verbunden sind und arbeiten. Auf dem Server sind leider nicht alle ...

Multimedia
PDF Dokumente KOSTENLOS ausfüllen, wie?
Mrhallo19981Vor 1 TagFrageMultimedia12 Kommentare

Hallo, ich möchte PDF Dokumente kostenlos ausfüllen. Anschließend sollen diese Signiert werden. Signieren tu ich mit einem Zertifikat von Adobe. Deswegen ist es wichtig, ...

Windows 10
Blog 2: Mal wieder Microsoft haten?
GrueneSosseMitSpeckVor 1 TagBlogWindows 102 Kommentare

und allseits beliebt: die Kirsche blüht vor dem Haus. Also endlich mal die neue Kamera ausgepackt, ein paar Fotos geknipst, und dann? USB Kabel ...