2013-02-26 41 views
-1

下面是我的批處理文件代碼:在批處理文件中定義如何更新變量

@echo off & setlocal 
set ver1="doc pic\ABC\" 
set ver2="C:\Users\elmo\Desktop\error4.png" 
E: 
cd %ver1% 
copy %ver2% 

的問題是,我沒有得到任何的方式來更新從我的節目這些變量;有什麼辦法,我可以這樣做嗎?

+0

什麼程序?你究竟想要做什麼?另外,'@echa off'? – LittleBobbyTables 2013-02-26 13:45:52

回答

0

進程的環境變量在父進程的進程啓動時被填充。之後,無法在運行過程中更改或添加變量。

因此,如果你有你的批處理文件並從中運行另一個程序,然後嘗試更改該程序的批處理文件的環境變量,那是不可能的。

如果您嘗試另一種方式 - 即從另一個程序啓動批處理文件,則可以通過在程序中首先設置它們來影響批處理文件的環境變量。

編輯:正如你所說,你有一個文本文件,其中包含您需要的信息。如果該文本文件需要另一個批處理文件的外觀,比如最簡單的方法是:

set ver1=foo 
set ver2=bar 

在這種情況下,你可能只是「包括」它

call foobar.cmd 

如果它看起來像這樣代替:

ver1=foo 
ver2=bar 

你可以把它用for /f解析它,只是運行一個命令set每一行同樣的工作:

for /f "delims=" %%L in (foobar.txt) do set "%%L" 

如果它只是看起來像這樣:

foo 
bar 

那麼一點點更多的工作需要(因爲你只是含蓄地知道,第一行是ver1和第二ver2):

​​

現在,如果在解析該文本文件之前未定義ver1ver2,則此方法有效。如果你僅僅需要更新自己的價值觀它變得混亂:

for /f "delims=" %%L in (foobar.txt) do (
    if not defined ver1updated (
    set "ver1=%%L" 
    set ver1updated=1 
) else if not defined ver2updated (
    set "ver2=%%L" 
    set ver2updated=1 
) 
) 
set ver1updated= 
set ver2updated= 

雖然在特定情況下,你可以採取的,有讀取文件到一個變量兩種方式的優勢,他們在不同的他們如何處理多行:

set /p ver1=<foobar.txt 
for /f "delims=" %%L in (foobar.txt) do set ver2=%%L 

第一個將只存儲文件的第一行,而第二種方法將更新文件中的每一行的變量,在最後線的值留下ver2。由於只有兩行開始,這也是一個選項分開它們。但是在編寫批處理文件時,我通常儘量不要混用習語,或者至少提供解釋的評論。

正如你所看到的,它可能會變得有點複雜。通常對於這樣的問題,如果你確切地說明了可以生成(如果有限制)或者你的輸入和輸出格式是什麼格式(你可以編輯你的問題:-))。

+0

感謝喬伊的迴應。讓我告訴你更多的東西。我沒有使用任何.NET技術來運行這個批處理文件,我使用了另一種名爲sanscript的語言,它與VB6語法相似。它有一個功能,我可以使用它運行批處理文件,就像在RUN命令上運行一樣..我的意思是如果我打開RUN提示並用完整路徑寫入批處理文件名並輸入然後它會完成這項工作,我想知道可以我們將參數傳遞給批處理文件,而像運行它一樣? – elmo 2013-02-27 07:40:03

+0

如果您從批處理文件運行外部程序,則可以解析其輸出。或者您可以將文件存儲在已知的位置,並讓批處理文件讀取它。所有的選項都有點難以解決,它取決於你可以(或願意)做什麼以及它需要的可靠程度。 – Joey 2013-02-27 09:15:52

+0

我已經創建了具有兩個參數的文本文件,這個文本文件將從我的程序中創建,每次都會有新的/不同的值,現在我唯一的擔心就是從批處理文件中的文本文件中讀取兩行文件,並更新ver1和ver2值。可能嗎? – elmo 2013-02-27 09:34:31

1

如果使用set /P選項,則可以將該變量設置爲提示的結果。

set /P ver1=Enter path: 

這將允許(強制)用戶輸入變量。具體來說,會提示用戶

Enter path: 

然後,無論他們鍵入後將放入ver1。

注意,在這個例子中,用戶可以輸入一些空格的東西。你會更安全地把%ver1放在語音標記中,所以它是"%ver1"


要從外部文件加載,請嘗試set /P ver1= <file.txt。您可能想要檢查文件是否存在if exist file.txt (set /P ver1= <file.txt)

如果您希望允許用戶在編輯文件之前更改文件,請事先簡單調用pause並提示用戶更改所需的文本文件。

例如,如果你想讓用戶看到什麼路徑設置,使他們可以先改變它們,你可以試試... ...

@echo off 
echo "Destination path (ver1.txt): " <ver1.txt 
echo "Source path (ver2.txt): " <ver2.txt 
echo "Please change the values in the text files as required." 
pause 
set /P ver1= <ver1.txt 
set /P ver2= <ver2.txt 

這已經有一段時間,因爲我確實是這樣的事情,所以我可能需要檢查它,但我相信這應該工作。

+0

飛濺謝謝你從你的答覆中得到很好的信息。 – elmo 2013-02-27 07:44:48

+0

@elmo如果它是正確的,隨時打勾它作爲正確的答案。如果沒有,提供更多的信息,我可以幫助更多。 – Glenn 2013-02-27 08:49:47

+0

飛濺這是一個很好的信息,但在我的情況下,我不能強迫用戶輸入值。我可以在文本文件中直接讀取這些值嗎? – elmo 2013-02-27 09:27:38