2014-11-21 19 views
-1

我想知道如何解決這個問題:設置取消設置變量,範圍CMD腳本的Windows,例程

rem declaring variable 
set "vara=" 
echo vara:%vara% bef 
call :myroutine 
echo vara:%vara% aft 

:routine 
rem ... 
rem assing value to variable vara 
set "vara=34" 
echo vara was assigned... 
rem .... 
echo vara:%vara% 
exit /b 

現在我有這個以後:

vara: bef 
vara was assigned 
vara:34 
vara: aft 

我需要日常的使用後的價值,像這樣...

vara: bef 
vara was assigned 
vara:34 
vara:34 aft 

翻:後 如何 去做吧?

回答

1

這就是已經發生的情況,假設您調用了正確的標籤。 (:myroutine!=:例程)。您的腳本還有一些其他小問題(在:routine之前缺少goto :EOF,並且在做@echo offsetlocal)。這是固定的:

@echo off 
setlocal 
rem declaring variable 
set "vara=" 
echo vara:%vara% bef 
call :routine 
echo vara:%vara% aft 

set "vara=" 
goto :EOF 

:routine 
rem ... 
rem assing value to variable vara 
set "vara=34" 
echo vara was assigned... 
rem .... 
echo vara:%vara% 
exit /b 

更多有關調用子程序/函數,見this page,要特別關注的章節關於返回值的不同方法。除非您在:routinesetlocal,否則您在問題中描述的內容已經按照您的要求工作。

+0

有沒有區別使用goto:EOF exit/b? 。 。我使用setlocal有什麼優勢? – Anita 2014-11-21 18:56:40

+0

對於這個腳本,'goto:EOF'和'exit/b'沒有區別。兩者之間唯一真正的區別是'exit/b'可以讓你根據需要設置'%ERRORLEVEL%'爲非零值。請參閱[本頁](http://www.robvanderwoude.com/exit.php)瞭解更多信息。使用'setlocal'可以防止您的腳本使用與腳本相關的變量來取消操作環境。如果沒有'setlocal','%vara%'將在腳本退出後保持定義狀態 - 或者無論如何不會使用'set「vara =」'行。這通常是不受歡迎的,除非有意進行。 – rojo 2014-11-21 19:57:39