2016-10-28 7 views
0

を連結し、私はこのようにフォーマットされたカンマ区切りの文字列を持っている:勝利バッチ - スプリット&

host1.mydomain.net,host2.mydomain.net,host3.mydomain.net 

を私はHTTP」先頭に追加する(追加のソフトウェアをインストールしたり、PowerShellを使用することはできません)バッチを使用しようとしています:// "を追加し、各ホスト名に" 8080 "を追加して、それらをすべて一緒に文字列にします。以下は

http://host1.mydomain.net:8080,http://host2.mydomain.net:8080,http://host3.mydomain.net:8080 

私は、新しいものを作成する文字列を分割し、試してみたが、私は、各ホスト名を抽出することができた一方で、私はそれらを連結するように見えることができないだけで1つの方法です。また、 "http:..."という文字列の先頭に ":8080"を末尾に付け、それぞれのカンマを ":8080、http://"に置き換えることを考えましたが、 。これがLinuxの場合、& sedはかなり簡単ですが、バッチ処理はいつも厳しいものでした。

@echo off 
set themes=Host1,Host2,Host3 
set NEWSTR1= 
echo list = "%themes%" 
for %%a in ("%themes:,=" "%") do (
    echo hostname is %%~a 
    if NOT DEFINED NEWSTR1 (  
     set NEWSTR1=remote://%%~a:4447 
     echo.%NEWSTR1% 
    ) ELSE (
     set NEWSTR1=%NEWSTR1%,remote://"%%a":4447 
     echo In the else %NEWSTR1%) 
) 

echo %NEWSTR1% 
+2

[遅延拡張](http://stackoverflow.com/a/30284028/2152082)を読んで、なぜコードが機能しないのかを理解してください。論理自体は大丈夫だと思われる。 – Stephan

答えて

4

をライン5 & 6を置き換えることができます単に部分文字列を使用することができますこのように、ここにlacement:だから、すべての,:8080,http://に置き換えてしまう

set "themes=Host1,Host2,Host3" 
set "NEWSTR1=http://%themes:,=:8080,http://%:8080" 

を。 http://を付加した後、文字列全体に:8080を追加すると、目的の結果が得られます。

+0

優れています。これはまさに私が探していたものです。きれいで簡潔で、forループが不要です。ありがとう。 – stackbacker

-2

これを試してみてください:

@Echo Off 
(Set themes=host1.mydomain.net,host2.mydomain.net,host3.mydomain.net) 
(Set pre=http://) 
(Set post=:8080) 
For %%A In (%themes%) Do Call Set NEWSTR1=%%NEWSTR1%%%pre%%%A%post%, 
Set "NEWSTR1=%NEWSTR1:~,-1%" 
Echo %NEWSTR1% 
Timeout -1 1>Nul 

あなたが aschipfl が提供する優れた方法を利用するために以下の行

Call Set "NEWSTR1=%pre%%%themes:,=%post%,%pre%%%%post%" 

+1

いくつかのアドバイス、@Compo:あなたの答えはコードの働きを説明すると、はるかに貴重です(アップフォースを引き付ける可能性があります)。誰かがあなたの答えを何年も後につまずくと、必要なものの80%になるかもしれません。説明は、人が自分で残りの部分を手に入れるのに役立ちます。ランダムなコードのダンプで単純な "これを試してみる"ことはほとんど役に立ちません。 –

+0

私は、ヘルプファイルや無数のヘルプサイトから無意味なカットアンドペーストを提供することに興味がないため、本当に良い答えが見えるようにするために役立ちます。私の答えはそこにあり、OPはそれを勉強して、それから学ぶべきです。私は人々を助けても大丈夫ですが、私は家庭教師になりたくはありません。フォーラムでの何年もの助けから、ほとんどの人はエッセイではなく答えを求めています。 – Compo

+2

あなたのコードを勉強すれば、間違ったことを学びます。真剣に、始めにそれらの設定されたコマンドで何が起こっているのですか?これらのカッコは引用符で囲む必要があります。また、すべてのコマンドを大文字にする必要はなく、呼び出しの代わりに遅延拡張を使用することもできます。 – SomethingDark

関連する問題