Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[cmd.exe] "%1" ersetzen

4 views
Skip to first unread message

Stefan Reuther

unread,
Dec 14, 2009, 2:10:10 PM12/14/09
to
Hallo,

in cmd.exe kann man ja in Umgebungsvariablen Text ersetzen
echo %foo:such=ersetz%
Wie geht das, wenn der zu suchende Text '%1' ist (also Prozentzeichen,
Eins), der einzusetzende Text ist %1 (also erster positionaler
Parameter) oder eine Umgebungsvariable? Meine bisherigen Versuche, in
%foo:%1=%1%
mit G�nsef��chen und/oder Caret zu quoten waren bisher nicht von Erfolg
gekr�nt.

Die zu l�sende Aufgabe ist eine Batch zum Starten von Dateien aus der
Shell. Meistens funktioniert der Eingabe des Namens 'foo.doc', aber aus
Gr�nden, die ich noch nicht ganz herausgefunden habe, bringt das
neuerdings gerne "Zugriff verweigert". Daher wollte ich mir mittels
assoc/ftype die Kommandozeile selbst zusammenbauen.

Klar, ein Zwanzigzeiler in C w�re vermutlich auch drin, aber geht es
auch in Batch?


Stefan

Ferry Bolhar

unread,
Dec 15, 2009, 3:31:54 AM12/15/09
to
"Stefan Reuther":

> in cmd.exe kann man ja in Umgebungsvariablen Text ersetzen
> echo %foo:such=ersetz%
> Wie geht das, wenn der zu suchende Text '%1' ist (also Prozentzeichen,
> Eins), der einzusetzende Text ist %1 (also erster positionaler
> Parameter) oder eine Umgebungsvariable? Meine bisherigen Versuche, in
> %foo:%1=%1%
> mit G�nsef��chen und/oder Caret zu quoten waren bisher nicht von Erfolg
> gekr�nt.

Beispiel:

C:\> set foo=%%1
C:\> set ersetz=XXX
C:\> echo %foo:%%1%ersetz%
XXX
C:\>

Wolltest du das? Oder habe ich etwas falsch verstanden?

LG, Ferry

--
Ing. Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: ferdinand.bolh...@wien.gv.at


Stefan Reuther

unread,
Dec 15, 2009, 1:19:59 PM12/15/09
to
Ferry Bolhar wrote:
> "Stefan Reuther":
>>in cmd.exe kann man ja in Umgebungsvariablen Text ersetzen
>> echo %foo:such=ersetz%
>>Wie geht das, wenn der zu suchende Text '%1' ist (also Prozentzeichen,
>>Eins), der einzusetzende Text ist %1 (also erster positionaler
>>Parameter) oder eine Umgebungsvariable? Meine bisherigen Versuche, in
>> %foo:%1=%1%
>>mit G�nsef��chen und/oder Caret zu quoten waren bisher nicht von Erfolg
>>gekr�nt.
>
> Beispiel:
>
> C:\> set foo=%%1
> C:\> set ersetz=XXX
> C:\> echo %foo:%%1%ersetz%
> XXX
> C:\>
>
> Wolltest du das?

Bei mir bringt das (mit verschiedenen XPs):
C:\>echo %foo:%%1%ersetz%
%foo:%%1XXX

Das Knifflige ist ja auch noch, dass das '%1' �berall stehen oder fehlen
kann.


Stefan

Stefan Pendl

unread,
Dec 15, 2009, 2:34:24 PM12/15/09
to

Wie w�re es mit folgendem Befehlsskript (test.cmd):

rem ---
set script_name=%~f0

for /f "tokens=2 delims==" %%A in ('assoc .txt') do set file_type=%%A

for /f "tokens=2 delims==" %%T in ('ftype %file_type%') do set cmd_line=%%T

set cmd_exe_tmp=%cmd_line:~0,-2%

for /f "tokens=*" %%C in ('echo %cmd_exe_tmp%') do set cmd_exe=%%~fC

%cmd_exe% "%script_name%"
rem ---

Dies setzt voraus, dass %1 am Ende der Befehlszeile f�r die Dateizuordnung steht, was meistens der Fall ist.

---
Stefan Pendl

Windows Vista SP2
AMD Turion X2 RM-70 2 GHz
4 GB RAM

Stefan Reuther

unread,
Dec 15, 2009, 3:35:41 PM12/15/09
to
Stefan Pendl wrote:
> On Tue, 15 Dec 2009 19:19:59 +0100, Stefan Reuther <stefa...@arcor.de> wrote:
>>>C:\> set foo=%%1
>>>C:\> set ersetz=XXX
>>>C:\> echo %foo:%%1%ersetz%
>>>XXX
>>>C:\>
>>>
>>>Wolltest du das?
>>
>>Bei mir bringt das (mit verschiedenen XPs):
>> C:\>echo %foo:%%1%ersetz%
>> %foo:%%1XXX
>
> Wie w�re es mit folgendem Befehlsskript (test.cmd):
[...]

> set cmd_exe_tmp=%cmd_line:~0,-2%
> for /f "tokens=*" %%C in ('echo %cmd_exe_tmp%') do set cmd_exe=%%~fC
>
> %cmd_exe% "%script_name%"
>
> Dies setzt voraus, dass %1 am Ende der Befehlszeile f�r die
> Dateizuordnung steht, was meistens der Fall ist.

Ist sie aber nicht. Die harmlose Variante sind noch ein paar ""
drumherum, die kniffligere sind Sachen wie
FirefoxHTML=C:\PROGRA~1\MOZILL~1\FIREFOX.EXE -url "%1" -requestPending

Ich bin inzwischen bei
:: prog=der String von ftype...
setlocal enabledelayedexpansion
start !prog:%%1=%~f1!
Mal sehen, wo das scheitert... (die Konstruktion !prog ohne 'start'
vorne funktioniert nicht).


Stefan

0 new messages