opixantos
Goto Top

For befehl funzt ned 100% :)

"c:\programme\testeman\meinverzeichnis\123.exe" "%1"

hallo ich versuche den pfad aus der reg heraus zu finden.. der pfad kann sich bei jedem anderen user anders aussehen.. mein problem sind die " zeichen so wie "%1" und zuletzt müsste das 123.exe weg das ich am schluss set pfad=%%o

c:\programme\testeman\meinverzeichnis\

bekomme..

hier mal mein code..

reg query HKEY_CLASSES_ROOT\Applications\123.exe\shell\open\command /ve|find /i "testeman" > %~n0_temp.txt
For /F "tokens=3* delims= : " %%o in ('find "REG_SZ" %~n0_temp.txt') do set nicki=%%o


könnte man diese zeichen per notepad ansteuern und durch suchen ersetzen löschen ??

Content-ID: 25548

Url: https://administrator.de/forum/for-befehl-funzt-ned-100-25548.html

Ausgedruckt am: 23.12.2024 um 05:12 Uhr

Biber
Biber 09.02.2006 um 09:02:25 Uhr
Goto Top
Moin opixantos,

ob das mit Notepad geht, weiß ich nicht... ich würde das schon auf dem Weg machen, den Du vorgezeichnet hast.

Bei Dir sollte (wenn ich das gedanklich nachspiele und wir die gleiche Version von Reg.exe benutzen, folgendes gegeben sein:
(vom CMD-Prompt)
Schritt 0:
Zum Lesbarermachen (am CMD-Prompt oder im Batch)
Set "RegKey=HKEY_CLASSES_ROOT\Applications\123.exe\shell\open\command"
Schritt 1:
reg query %RegKey% /ve

! REG.EXE VERSION 3.0

HKEY_CLASSES_ROOT\Applications\123.exe\shell\open\command
<NO NAME> REG_SZ "c:\testeman\Pfad mit Leerzeichen\123.exe" "%1"

Schritt 2, immer noch am CMD-Prompt:
reg query %RegKey% /ve|find "NO NAME"
<NO NAME> REG_SZ "c:\testeman\Pfad mit Leerzeichen\123.exe" "%1"

Schritt 3, auch am CMD-Prompt, EINE Zeile:
for /f "tokens=4*" %o in ('reg query %RegKey% /ve^|find "NO NAME"') do @echo %o
"c:\testeman\Pfad mit Leerzeichen\123.exe"

Final Schritt 4 - endgültige Ermittlung des Werts aus der Reg-Zeile im Batch:

for /f "tokens=4" %%o in ('reg query %RegKey% /ve^|find "NO NAME"') do Set "My123Pfad=%%o"

--->Variable My123path hat den Wert "c:\testeman\Pfad mit Leerzeichen\123.exe"

Jetzt nur den Teil "\123.exe" ersetzen durch "Nichts".
set "my123path=%my123path:\123.EXE=%"

Feddich.

Also bleiben folgende im Batch drei Zeilen über:
Set "RegKey=HKEY_CLASSES_ROOT\Applications\123.exe\shell\open\command"
for /f "tokens=4" %%o in ('reg query %RegKey% /ve^|find "NO NAME"') do Set "My123Pfad=%%o"
set "my123path=%my123path:\123.EXE=%"

> in My123path steht jetzt:
set my123path
My123path="c:\testeman\Pfad mit Leerzeichen"

That's all.
HTH Biber

P.S. Und sag bitte im Bereich "Batch & Shell" nie "geht ned".
Erstens hieße es "funktioniert nicht" und zweitens gibt es bei Batchen nur ein "funktioniert noch nicht 100%ig". *g
[Edit] Variable %RegKey% in das Beispiel eingebaut [/Edit]
Biber
Biber 09.02.2006 um 19:29:10 Uhr
Goto Top
Thx, opixantos,
für das Editieren Deines Titels... face-wink

Ich hab meinen Kommentar auch noch mal editiert und ein bisschen lesbarer gemacht. Würde ich bei meinen eigenen Bätschelchen ja auch so machen wie oben mit der %RegKey%-Variablen.

Schönen Abend noch
Biber
opixantos
opixantos 09.02.2006 um 19:35:29 Uhr
Goto Top
hallo biber danke dir.. ich konnte es anpassen so das es geht..
nur leider giebts da einige rätsel für mich

/ve^|find = ging bei mir nicht

/ve|find = ging bei mir dan ohne ^

warum geht das bei dir mit und bei mir nur ohne ?
ist es bei dir wen du es mal ohne ^ machst falsch oder klappts trotzdem ?
Biber
Biber 09.02.2006 um 19:49:20 Uhr
Goto Top
Hallo opixantos,
die gleiche Rückmeldung hatte ich schon mal hier im Forum.

Ich kenne es von meinen Bätchen an allen Rechnern, an denen sie laufen nur und ausschließlich das Maskieren von Pipe-Symbolen und Steuerzeichen im Batch mit dem Caret ("^"). Also "^|", wenn ich im Batch einen "Befehl-im-Befehl" habe wie in der FOR-Zeile.

Ohne Caret gibt es bei mir einen Fehler. Unter Win2k, unter XP...immer.

Auch laut den spärlichen M$-Dokumentationen und den paar anderen Batch-Beispielen im Internet dürfte es nur so gehen.

Ich habe nicht die geringste Vermutung, was bei Dir anders sein könnte *kopfkratz*...

Kann ja fast nur ein höchst undokumentierter Reg-Schlüssel sein oder ein absolut irrwitziger Seiteneffekt eines Tastaturtreibers... keine Ahnung.
Behalte ich im Auge ^^.
Gibt es irgendetwas Bemerkenswertes zu Deiner Win-Version? Benutzt Du die "üblichen" deutschen Sprach/Regionseinstellungen?

Grüße
Biber
opixantos
opixantos 09.02.2006 um 20:21:04 Uhr
Goto Top
hmmmm..


eher ein bios update machen face-sad ? vermutlich face-smile

ver 5.1
Biber
Biber 10.02.2006 um 00:16:22 Uhr
Goto Top
Moin opixantos,
würde ich davon abhängig machen, ob die von Dir erzeugten Batches auch bei Deinen Kunden/auf "Standard-Rechnern" laufen sollen.

Wenn ja, sollte es Dir schon wichtig sein, eine "realistische Testumgebung" zu haben.
Nützt Deinen Kunden nichts, wenn Deine Bätche auf Deinem Rechner laufen und bei ihnen nicht.
Umgekehrt solltest Du keinen Sourcecode blind anpassen, der bei Dir so nicht laufen würde.

Wie geschrieben, auf allen Rechnern, mit denen ich mich duze, laufen die Bätche mit der von mir geposteten Syntax. Und diese Syntax steht auch so in der M$-Hilfe.

Mit "ver 5.1" meinst Du so etwas?
C:\Dokumente und Einstellungen\nt>ver

Microsoft Windows XP [Version 5.1.2600] ????
Hmmm... erklärt auch nicht das Phänomen...
lass uns mal die Diskussion über mail weiterführen... ich schick Dir mal eine PN mit einer Mailadresse von mir.

Gruß Biber
opixantos
opixantos 10.02.2006 um 07:49:22 Uhr
Goto Top
hallo biber

ich werde dich heute noch per mail kontaktieren.. zuerst muss ich mal richtig bei meiner lieblings bäckerei vorbei gehen und ein gutes morgenessen einnehmen.

ich hab da jetzt ein problem mit pfadleerzeichen

c:\pad leerzeichen\test.exe

nun wen ich start c:\pad leerzeichen\test.exe
mache kommet fehlermeldung c:\pad existiert nicht.. wie kann ich diesen leerzeichen richtig angeben das es den rest auch korrekt ausführt..?

besten dank
opixantos
opixantos 10.02.2006 um 07:50:19 Uhr
Goto Top
doppelt face-sad
Biber
Biber 10.02.2006 um 11:05:19 Uhr
Goto Top
Lass es Dir schmecken, opixantos.... face-wink

c:\pad leerzeichen\test.exe
Pfade und/oder Dateinamen mit Leerzeichen darin müssen in doppelte Anführungszeichen eingeschlossen sein.
also "c:\pad leerzeichen\test.exe" oder
start /w "c:\pad leerzeichen\test.exe"

Bis später
Biber
opixantos
opixantos 10.02.2006 um 11:07:43 Uhr
Goto Top
hallo biber

und wen ich es bei

if exist c:\pad leerzeichen\test.exe goto :ende

benutzen möchte ?
Biber
Biber 10.02.2006 um 11:13:50 Uhr
Goto Top
Dann auch.... *lachtlaut*

if exist "c:\pad leerzeichen\test.exe" goto :ende
opixantos
opixantos 10.02.2006 um 11:15:27 Uhr
Goto Top
hm..
ach mannoooooooooooo ich hab den fehler jetzt.. es war ein zeichen & zuviel face-sad darum sorry aber nun klapts

big thx