2015-10-16 44 views
0

我很確定這是一個簡單的命令,但我無法在任何地方找到它。在Windows命令提示符下的文件中查找並打印帶有通配符的子字符串

示例文件內容:

A-極長LINE-OF-垃圾VERSION123-CONTINUE-LONG-LINE-OF-垃圾

1)假設線是真的長

2.)我需要找出它是什麼版本。我知道它包含版本,但我不知道它是版本123。

3.)我想要的是一個命令,它會通過查找子字符串「VERSION」的文件,如果它發現它打印出VERSION123而不是超長破折號,這很可能會導致系統凍結。

謝謝

+1

所以在你的行版本後會有版本號整數,之後會有字母或特殊字符?將只有1個版本或多個數字或版本123 –

+1

請向我們展示這些行的實際樣本 – Paul

+0

請告訴我們您是否真的*在** MS-DOS **中工作,或者如果您正在使用命令提示符** Windows **,因爲後者支持很多附加功能...... – aschipfl

回答

3

假設版本是純粹的數字,不與零開始,下面應該這樣做:

set VAR=A-VERY-LONG-LINE-OF-GARBAGE-VERSION123-CONTINUE-LONG-LINE-OF-GARBAGE 
set /A VAR=%VAR:*VERSION=% 
echo VERSION%VAR% 

如果發生多個VERSION部分,第一個是拍攝。

注意,這適用於Windows命令提示符(cmd.exe)只,它將爲MS-DOS(command.com)工作,由於其不支持有set /A(我甚至不知道是否該字符串替換語法在那裏工作)!


萬一版本的代碼是不是純粹的數字,你可以使用以下命令:

set VAR=A-VERY-LONG-LINE-OF-GARBAGE-VERSION123-CONTINUE-LONG-LINE-OF-GARBAGE 
set VAR=%VAR:*VERSION=% 
for /F "tokens=1 delims=- eol=-" %%L in ("%VAR%") do (set VAR=%%L) 
echo VERSION%VAR% 

這依賴於該-角色界定版本代碼的事實。

如果要直接在命令提示符而不是在批處理文件中嘗試此操作,請將%%L替換爲%L(兩次)。

+1

在MS-DOS中不起作用。只要提一下,我很確定,OP使用'cmd',而不是MS-DOS(儘管他的標題)。 '/ a'和字符串替換的好組合。 (假設版本是Numbers-Only) – Stephan

+0

嗨,對不起,我的意思是windows命令提示符。但是,版本號不是純數字。它可能包含字母或甚至「。」 。無論如何去解決這個問題?謝謝 – steve

+0

@steve,我爲我的答案添加了一個非數字版本的替代方案,假設它通過'-'與其餘部分分開(根據您的示例字符串)... – aschipfl

相關問題