2013-07-12 9 views
40

にリストや配列を作成します。私はこのようなバッチファイル内のリストまたは配列を宣言することができます。Windowsのバッチ

set list = "A B C D" 

そして、私は間のスペースで、ファイルにこれらを記述する必要があります。

A 

B 

C 

D 

答えて

0

バッチファイルには「配列」タイプはありませんが、これは時には上下の両方にありますが、回避策があります。バッチ内の配列に似たシステムを自分で作成するための提案を提供するリンクがあります:http://hypftier.de/en/batch-tricks-arrays。ファイル "echo variable >> filepath"へのエコーは、変数の内容をファイルにエコーし、 "echo"の働きをします。 (ピリオドは入力ミスではありません)、改行文字をエコーし​​ます。私はこれら2つが一緒にあなたが必要とするものを達成するために働くべきだと思います。

10
@echo off 
setlocal 
set "list=a b c d" 
(
for %%i in (%list%) do (
    echo(%%i 
    echo(
) 
)>file.txt 

実際には、変数を一括して宣言することはできません。変数に値を代入するとそれが作成され、空の文字列を代入するとそれが削除されます。割り当てられた値を持たない変数名は、空の文字列の値を持ちます。すべての変数は文字列です - 例外はありません。数学的関数を実行するように見える操作はありますが、文字列から前後に変換することで動作します。

バッチは変数名のスペースに敏感なので、投稿としての割り当てでは、引用符を含む文字列"A B C D"が変数"list "に割り当てられます。 set "var=string"の構文は、値stringvarに割り当てますが、set var=stringは同じことを行います。ほぼ。最初のケースでは、終了クォートの後の空白の末尾の空白は、割り当てられた値から除外され、後の空白はINCLUDEDです。スペースは印刷すると少し見やすくなります。

ECHO文字列をエコーし​​ます。クラシス的には、バッチで使用されるデフォルトの区切り文字の1つ(スペース、TAB、COMMA、SEMICOLONのいずれかですが、いずれも同様ですが、テキストエディタによるスペーススケープに変換されることもあります)他の人は長年にわたり独自性を増してきました)Oに続くECHOの文字は、文書化されたSPACEがすべきことを正確に行うことが分かっています。 DOTは一般的です。オープン括弧(は、おそらく空行が生成されます

ECHO(%emptyvalue% 

一方ECHO状態(ECHO is on/off)のレポートを生成するコマンド

ECHO.%emptyvalue% 

以来、最も有用です。

ECHO(の問題は、結果が不均衡に見えるということです。

75

はい、両方の方法を使用できます。あなただけの要素を分離したいと分離されたラインでは、それらを表示した場合、リストは単純です:

set list=A B C D 

スペースで区切られた値のリストを簡単にforコマンドで処理することができる。

(for %%a in (%list%) do (
    echo %%a 
    echo/ 
)) > theFile.txt 

あなたはまた、このよう配列を作成することがあります。

setlocal EnableDelayedExpansion 
set n=0 
for %%a in (A B C D) do (
    set vector[!n!]=%%a 
    set /A n+=1 
) 

をして配列要素をこのように示しています

をバッチファイル内アレイ管理に関する詳細については

(for /L %%i in (0,1,3) do (
    echo !vector[%%i]! 
    echo/ 
)) > theFile.txt 
、以下を参照してください Arrays, linked lists and other data structures in cmd.exe (batch) script

注意を! setコマンドに含まれるすべての文字が変数名(等号の左側)または変数値に挿入されていることを知っている必要があります。たとえば、次のコマンド:

set list = "A B C D" 

は値"A B C D"(スペース、引用符、Aなど)を備えたlist(リスト空間)という変数を作成します。このため、setコマンドにはスペースを挿入しないことをお勧めします。あなたが引用符で値を囲む必要がある場合は、変数名とその値の両方を囲む必要があります。

set "list=A B C D" 

はPS - あなたは空白行を左にするために、ECHO.を使用すべきではありません!代わりの方法はECHO/です。このポイントに関する詳細については、以下を参照してください。http://www.dostips.com/forum/viewtopic.php?f=3&t=774

+0

ええと...そのベクトル[私は]私が探していたものです!ありがとう! – JasonXA

+1

'for/L %% i in(0,1、%n%)'を使用すると、最初の3つではなくすべて取得する必要があります。 –

-1
@echo off 

set array= 

setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION 

set nl=^&echo(

set array=auto blue ^!nl!^ 
    bycicle green ^!nl!^ 
    buggy red 

echo convert the String in indexed arrays 

set /a index=0 

for /F "tokens=1,2,3*" %%a in ('echo(!array!') do (

echo(vehicle[!index!]=%%a color[!index!]=%%b 
set vehicle[!index!]=%%a 
set color[!index!]=%%b 
set /a index=!index!+1 

) 

echo use the arrays 

echo(%vehicle[1]% %color[1]% 
echo oder 

set index=1 
echo(!vehicle[%index%]! !color[%index%]! 
4

時々、配列要素がその時点であなたは、このように配列を作成することができ、非常に長くなることがあります。

set list=a 
set list=%list%;b 
set list=%list%;c 
set list=%list%;d 

そして、それを示しています

@echo off 
for %%a in (%list%) do ( 
echo %%a 
echo/ 
) 
関連する問題