2016-03-02 142 views
2

我使用批處理腳本,我有一個這樣的輸入變量:批處理文件:輸入條形碼字符串替換

~zon|123456789~~zln|12~ 

輸入後,我得到這個消息:「|在這個時候意外的。」

我應該如何使用字符串替換有如下的輸出結果:

123456789-12 

我試着用這一個,但它不工作。 使用日期格式是好的,但。 你有什麼想法嗎?

set path=~zon|123456789~~zln|12~ 
echo the variable is "%path:~4,8%" 
pause 

輸出:

C:>設定路徑=〜ZON | 123456789 ~~ ZLN | 12〜

'23897975 ~~萬' 不被識別爲內部或外部的命令, 可操作的程序或批處理文件。

回答

2

因爲|是一個重定向命令,並且比設置的prio更高 - 所以你必須使用像下面的引號。 由於存在這樣的Windows環境變量,因此設置名稱爲path的變量並不是個好主意。您可以使用由~|分割字符串:

set "p=~zon|123456789~~zln|12~" 
for /f "tokens=2 delims=|~" %%a in ("%p%") do echo %%a 

與子字符串:

echo "%p:~5,9%" 

編輯:

得到其他兩個數字:

set "p=~zon|EightDigits~~zln|OneOrTwoDigits~" 
for /f "tokens=2,4 delims=|~" %%a in ("%p%") do echo %%a-%%b 
+0

太好了。當前輸出爲123456789. 有些情況下可能是一位或兩位數的「12」。 我應該如何寫才能得到這個輸出? 123456789-12(「 - 」後的後兩位數字) 123456789-8(在「 - 」後面的最後一位數) – virtualixer

+0

條形碼的格式是〜zon | EightDigits ~~ zln | OneOrTwoDigits〜 – virtualixer

+0

@virtualixer - 檢查我的編輯。 – npocmaka

2
set "p=~zon|123456789~~zln|12~" 
for /f "tokens=2,4 delims=|~" %%a in ("%p%") do echo %%a-%%b 

符號化是這樣的:

~zon|123456789~~zln|12~ 
# 1 # 2 ## 3 #4 # 

# =定界符;連續的分隔符被視爲一個。如果第一個字符是分隔符,它將被忽略。

+0

工作正常!謝謝。我有另一個。 我應該如何傳遞字符串%% a - %% b來執行下面的IF語句? IF %%一個 - %% b EQU無( ((ECHO)和ECHO你不應該讓它空)(ECHO)暫停和GOTO:!菜單 ) ELSE (@ ECHO %% a - %% b%日期:〜4,2%/%日期:〜7,2%/%日期:〜10,4%_%時間:〜0.2%:%時間:〜3.2%: %time:〜6,2%>> C:\ tokenized.txt ) – virtualixer

+0

生成的字符串至少是破折號 - 因爲我們明確添加了該字符串。所以測試'如果「%% a - %% b」==「 - 」回顯空輸入「 – Stephan

+0

它只是繞過整個IF語句行當我嘗試。有什麼想法嗎? – virtualixer

相關問題