2013-11-22 66 views
0

我有一個變量「VAR1」有內容「犀利=撫慰」如何創建新的可變出當前變量內容

var1=sharp=soothe 

如何創建只使用var1的內容得到這個

一個新變量
sharp=soothe 

我想以某種方式使用set命令這樣

set %var1%= 

,但我不能得到進一步的莫過於此。我希望我不必在=符號之前和之後搜索字符串。我認爲會有比這更快的方式。

好的,我很親密。我發現我正在使用的其他代碼,這幾乎適用於無限數量的變量,但set命令語法又錯了。

set var1=unfilter=rem 
set var2=mdegrain=rem 

set n=0 
:parseArgs2 
set /a n+=1 
if defined var%n% (
    set %var%n%% 
    shift /1 
    goto :parseArgs2 
) 

回答

3

剛剛從你的嘗試刪除一個字符:-)

set %var1% 

如果你有一個「陣列「的變量:var1,var2,... var20,那麼你可以SE與延遲擴張FOR/L循環:

setlocal enableDelayedExpansion 
rem define your variables here ... 
for /l %%N in (1 1 20) do set !var%%N! 

或者,如果您有一系列隨機命名的變量,一個簡單的for會做:

setlocal enableDelayedExpansion 
rem define your variables here ... 
for %%V in (varA varB varC varD) do set !%%V! 

更新響應附加問題

我不明白你爲什麼使用SHIFT,除非有其他代碼沒有顯示。我刪除了SHIFT。

set var1=unfilter=rem 
set var2=mdegrain=rem 

set n=0 
:parseArgs2 
set /a n+=1 
if defined var%n% (
    call set %%var%n%%% 
    goto :parseArgs2 
) 

setlocal enableDelayedExpansion 
set var1=unfilter=rem 
set var2=mdegrain=rem 

set n=0 
:parseArgs2 
set /a n+=1 
if defined var%n% (
    set !var%n%! 
    goto :parseArgs2 
) 
+0

這對'INI'文件很有效(每行包含'property = value '):例如'for/f「delims =」%% a在(file.ini)中設置「$ %% a」'。 '$'從內存中重新獲得變量。 – Endoro

+0

還有一件事!我不知道我會一直有多少變量,可能是20,可能是22.是否有辦法在最後一個定義的變量被處理後自動停止?我不想總是編輯那個數字20.「if defined」命令應該可以在這裏使用? – tyee

+0

@dbenbam - 我有另一個頭腦風暴。再次看到第一篇文章。 set命令語法再次出錯,我無法弄清楚。 – tyee

3

試試這個:

set var1=sharp=soothe 
for /f "tokens=*" %%a in ("%var1%") do set %%a 
echo %sharp% 

或者只是:

for %%a in ("%var1%") do set %%a 
+0

作品太好了!現在還有一件事。我有大約20種這類變量來做同樣的事情。我確定我可以以某種方式使用另一個for循環,也許在這個for循環中? – tyee

+0

+1,很好!更有趣的是它不適用於引號中的「%% a」:'對於%% a in(「%var1%」)設置「%% a」',我不知道,爲什麼不。 – Endoro

+0

@endoro - 封閉引號不起作用,因爲'%% a'已經包含引號。只需使用'set「%%〜a」'代替。 – dbenham

2

也許這是你想要的嗎?

@echo off 
setlocal EnableDelayedExpansion 

set var1=unfilter=rem 
set var2=mdegrain=rem 
set var10=resize=rem 

for /F "tokens=1* delims==" %%a in ('set var') do set %%b 

在該方法中也沒有關係定義的變量的數目也不順序;所有定義的變量總是被處理。

編輯:下面是當一個ECHO命令在set %%b之前放置在輸出:

set unfilter=rem 
set resize=rem 
set mdegrain=rem 
+0

這不是在這裏工作。 'set var'命令的輸出是什麼? @Aacini – tyee

+0

你測試過了嗎?請參閱上面編輯中的示例... – Aacini