很簡單的問題,更換「%」,沒有soloution尚未:在一個變量
C:\> Set var=^%test^%
C:\> Echo %var%
%test%
C:\> Echo %var:^%=-%
%test%
C:\> Why is this not producing -test-?
我想加倍和去除胡蘿蔔(^
)收效甚微。任何建議(或解決方案)讚賞。
蒙娜麗莎
很簡單的問題,更換「%」,沒有soloution尚未:在一個變量
C:\> Set var=^%test^%
C:\> Echo %var%
%test%
C:\> Echo %var:^%=-%
%test%
C:\> Why is this not producing -test-?
我想加倍和去除胡蘿蔔(^
)收效甚微。任何建議(或解決方案)讚賞。
蒙娜麗莎
使用SET搜索和替換替換%
的唯一方法是使用延遲擴展。這是不可能逃脫%
的方式,讓您使用正常擴展。
%
的規則在批處理和命令提示符中是不同的。
從批處理腳本內,%
通過加倍它轉義:
@echo off
setlocal enableDelayedExpansion
set "var=%%test%%"
set var
set "var=!var:%%=-!"
set var
--OUTPUT--
var=%test%
var=-test-
從命令提示,它實際上是不可能逃脫%
。如果引號內的文字不等於變量名稱,則百分比留在原地。此外,未配對的百分比也留在原地。下面的代碼假定變量test
不存在:
C:\test>cmd /v:on
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\test>set "var=%test%"
C:\test>set var
var=%test%
C:\test>set "var=!var:%=-!"
C:\test>set var
var=-test-
C:\test>
如果變量test
確實存在,那麼你可以設置自己的初始var
值使用類似:
c:\test>set "var=%^test%"
var=%test%
插入符號「逃逸」的下一個字符,所以它被消耗,留下正確的值。它可以放置在百分比內的任何地方。但是代碼假定變量^test
不存在。如果是這樣,那麼它會簡單地擴大該值,如下所示:
C:\test>set "^test=Hello world"
C:\test>set ^^
^test=Hello world
C:\test>set "var=%^test%"
C:\test>set var
var=Hello world
C:\test>
@echo off&setlocal enabledelayedexpansion
Set var=%%test%%
set a=var:%%=
echo var is %var%
echo var%%= is !%a%!
這應該工作... %% ^沒有逃脫%%的批處理文件。在一個批處理文件中,^%真的是在%之後轉義字符,在這裏是換行符。
但是這可以只用一個'%'來完成嗎? – Monacraft
'^%真的是在%之後轉義字符,在這種情況下是換行符 - 這是錯誤的'^%test ^%',第二個脫字符號將被用作變量名稱'test ^'的一部分,並且在擴展變量(或者在這種情況下,完整的部分將保持不變),兩個脫字符都逃避下面的字符,這在兩種情況下都是百分號,沒有任何進一步的效果。 – jeb
嘗試行'set a = ^%test ^%'後跟行'hello world',a將被設置爲'hello world'。 – nephi12