2012-02-22 71 views
7

我試圖創建一個批處理字符串是這樣的:> abcd_批次字符串連接

我有一個名爲soeid變量,以價值爲abcd。所以這就是我所做的,但它不起作用。

set soeid=abcd 

set "val1=>" 
set "val2=_" 
set "str=%val1%%soeid%%val2%" 

echo %str% 
+5

你應該在「不起作用」之後鍵入的第一件事是解釋* how *不起作用。我們無法閱讀您的想法或從這裏看到您的屏幕;我們所要做的就是你在問題中告訴我們的東西。如果您需要幫助,您需要告訴我們您遇到的問題,以及您嘗試的方法無效。 – 2012-02-22 20:19:10

回答

11

我相信它工作得很好。爲了證明它,在定義該值後添加SET STR,您將看到正確的值。

您遇到的問題是當您嘗試回顯該值時,正在執行的行變爲:echo >abcd_。該>沒有引用或轉義,所以它是簡單地把ECHO的輸出中不帶任何參數,並將其重定向到一個名爲「abcd_」

文件如果你不介意看到報價,然後更改您的線路以echo "%str%"和它會工作。

另一種選擇是啓用和使用延遲擴展(我假設這是一個批處理腳本代碼,而不是在命令行上執行)

setlocal enableDelayedExpansion 
set soeid=abcd 

set "val1=>" 
set "val2=_" 
set "str=%val1%%soeid%%val2%" 

echo !str! 

普通%var%膨脹發生早上,而解釋器正在解析該行。延遲!var!擴展發生在執行前的最後。重定向在中間的某處被檢測到。這就是正常擴展不起作用的原因 - 解釋器看到擴展的>字符並將其解釋爲輸出重定向操作符。延遲擴展隱藏解釋器中的>字符,直到解析重定向爲止。

有關延遲擴展的更多信息,請從命令行輸入SET /?,並從以「最後支持延遲的環境變量擴展......」開頭的段落開始閱讀。

+0

非常感謝,現在它工作得很好。問題是我用echo%str%而不是!str !.請你能向我解釋兩者之間的區別。 – NewQueries 2012-02-22 20:25:04

+0

@ NewQueries-我用解釋擴展了我的答案 – dbenham 2012-02-22 20:40:59