2010-05-05 10 views
68

Wir Strings in einer Batch-Datei ersetzen können mit dem folgenden BefehlString Ersatz in Batch-Datei

set str="jump over the chair" 
set str=%str:chair=table% 

Diese Linien funktionieren und die Zeichenfolge „Sprung über den Stuhl“ zu „Sprung über den Tisch“. Jetzt möchte ich das Wort "Stuhl" in der Zeichenfolge durch eine Variable ersetzen und ich weiß nicht, wie es geht.

set word=table 
set str="jump over the chair" 
?? 

Irgendwelche Ideen?

+0

möglich Duplikat [wie String in einer Bat-Datei mit Kommandozeilen-Parameter ersetzen string] (http://stackoverflow.com/questions/5816178/how-to-replace-string-inside-a-bat-file-with-command-line-parameter-string), die viel informellere Antwort (es hat die gleichen Lösungen wie die Antworten hier) – Fr0sT

+1

jetzt ist es nicht wichtig, wer zuerst war, aber es ist gut, identische Fragen zu verlinken und auf die unwiderruflichste Antwort zu zeigen. – Fr0sT

Antwort

56

Sie können! Verwenden, aber Sie müssen den Schalter ENABLEDELAYEDEXPANSION gesetzt haben.

setlocal ENABLEDELAYEDEXPANSION 
set word=table 
set str="jump over the chair" 
set str=%str:chair=!word!% 
57

Sie können den folgenden kleinen Trick:

set word=table 
set str="jump over the chair" 
call set str=%%str:chair=%word%%% 
echo %str% 

Die call eine weitere Schicht mit variabler Ausdehnung bewirkt, was es notwendig macht, die ursprünglichen % Zeichen zu zitieren, aber es funktioniert alles am Ende heraus.

+0

Ich mag diese Lösung, da das Entkommen von Strings in Batchdateien immer problematisch ist, fügt ENABLEDELAYEDEXPANSION einfach einen weiteren Charakter hinzu, um den man sich sorgen muss. – Anders

+5

Wichtig in Bezug auf die Antwort von ** Joey **. Sie müssen den Code in die Batch-Datei einfügen, damit er funktioniert. Wenn Sie es nur in der Befehlszeile testen, gibt es einen unerwarteten '% 'Sprung über das" Wort %%% "zurück. Beachten Sie, dass der Code in Batchdateien und in der Befehlszeile möglicherweise andere Ergebnisse liefert. – dadhi

+0

Aufbauend auf Dadhi's Kommentar ist die Lösung für die Kommandozeile hier: https://stackoverflow.com/questions/29944902/how-to-replace-with-percent-character-in-cmd-exe. –

-4

c:> replace.bat "123def789" "def" "456"


 replace.bat 

setlocal enabledelayedexpansion 
set data=%1 
set search=%2 
set replace=%3 
set "data=!data:%search%=%replace%!" 
echo %data% 
REM Use %data% here before calling endlocal. 
endlocal 
+0

Was macht das? Zukünftige Besucher können diesen Code möglicherweise überhaupt nicht verstehen. – SteveFest

+0

Hier möchte ich erwähnen, dass Sie vor Endlocal variable Daten verwenden müssen. –