2011-11-13 23 views
1

私は、文字列中の部分文字列の後に出現する4文字を抽出する方法を考え出しています。私が思いつくことができる最も近いことは、ひどく非効率的な見た目であり、すべてうまく機能しないということです。誰もがこれを行うためのより良い方法を知っていますか?それを改善するためにバッチファイルを使用して、別の文字列内の部分文字列の一致後に4文字を取得しますか?

@echo off 
cls 
SET "_TMPVAR=Ports|http:8000|https:8443|" 
SET _TMPVAR=%_TMPVAR:|=,% 
FOR /F "tokens=1-3 delims=," %%m in ("%_TMPVAR%") do (
    SET "_TMPVAR1=%%n" 
    SET "_TMPVAR2=%%o" 
) 
SET _HTTPS=0000 
IF "%_TMPVAR1:~4,1%"=="s" (
    SET "_HTTPS=%_TMPVAR1:~-4%" 
) 
IF "%_TMPVAR2:~4,1%"=="s" (
    SET "_HTTPS=%_TMPVAR2:~-4%" 
) 
SET _ 
ECHO SSL Port is %_HTTPS% 
pause 
+0

whayは "ひどく非効率的な見た目"ですか?それがあなたのために働くなら、それはOKです。あなたの "ルック"の定義に依存するので、BATプログラミングは効率的に見えません。 –

+0

同じ出力を持つようにバッチファイルを書き込む別の方法をお探しですか?または、他の何か? – Gabe

+0

私はコードを短縮したり、改善したりしようとしています。私はそれを読んだ人には意味があるようにしたい。 – djangofan

答えて

2

一つの方法は、一見不要なカンマの交換排除することである。また、

SET "_TMPVAR=Ports|http:8000|https:8443|" 
FOR /F "tokens=1-3 delims=|" %%m in ("%_TMPVAR%") do (
    SET "_TMPVAR1=%%n" 
    SET "_TMPVAR2=%%o" 
) 

を、あなたはあなたを壊すために|:に分割する区切りリストを活用することができますスキーム、およびポートを使用して、ロジックをステートメント内に入れることができます。

@echo off 
cls 
SET "_TMPVAR=Ports|http:8000|https:8443|" 
SET _HTTPS=0000 
FOR /F "tokens=2-7 delims=|:" %%a in ("%_TMPVAR%") do (
    IF %%a==https SET _HTTPS=%%b 
    IF %%c==https SET _HTTPS=%%d 
    IF %%e==https SET _HTTPS=%%f 
) 
SET _ 
ECHO SSL Port is %_HTTPS% 

デリミタの動作を使用する利点は、任意の長さのポート番号を使用できることです。

関連する問題