2015-01-14 112 views
0

我想做到這一點:有沒有辦法重新設置第一個批處理文件參數?

set %1="html" 

但它不工作,我回來:

「‘HTML’」不被識別爲一個內部或外部命令, 可操作的程序或批處理文件。

+0

你到底想幹什麼?你的代碼將變量設置爲「html」,該變量的名稱是過程的第一個參數。請解釋你想要在上下文中做什麼 - 向我們展示一點你的代碼,而不是單獨的一個語句,並解釋你打算作爲參數以及你的結果應該通過編輯你的問題來解釋。 – Magoo

+0

我想你應該重新思考使用另一種解決方案 – jeb

回答

1

在此請看:

@ECHO OFF 
Setlocal EnableDelayedExpansion 
SET 1="html" 
echo %1% 
echo !1! 
PAUSE 

執行該代碼參數abc將返回

abc 
html 

顯然,你需要Setlocal EnableDelayedExpansion要能 「覆蓋」 %1。但是,這實際上不會覆蓋%1,而是使其更新值可訪問。 AFAIK無法真正覆蓋它。只有一個解決辦法,我能想到的:

與「HTML」作爲第二個參數打電話給你的文件,並使用SHIFT

ECHO %1 
SHIFT 
ECHO %1 

執行使用參數X和HTML代碼(yourfile.bat X HTML)將打印:

X

HTML

2

%1不是您使用SET分配的變量。它表示調用批處理腳本(test.bat arg1call test.bat arg1)或子例程(call :subroutine arg1)的第一個參數。

如果你想改變%1的值,那麼你在做CALL的地方,而不是在CALLed腳本/例程中。

有些情況下,使用set %1=value行。您可能有一個例程計算一個值,然後將結果存儲在一個變量中,該變量的名稱從第一個參數中檢索到該例程。

但是,如果該例程被調用時沒有參數,則該行會擴展爲set =value,這會產生您正在獲取的錯誤。

如果您正在使用%1參數,並且有條件地想要在腳本中「更改值」,那麼您必須將該值傳遞給環境變量,並從該點開始處理該變量。

一個簡單的例子是提供一個默認值,如果該參數不過去了:

@echo off 
setlocal 
set "arg1=%~1" 
if not defined arg1 set "arg1=default" 
REM From now on you never refer to `%1` but use `%arg1%` instead. 
相關問題