2

やあ、この C コードをバッチ ファイルに実装したい

int i;
scanf("%d", &i);
for(int j = 0;j<i;j++)
{
  scanf("%d",&j);
  printf("%d",j);
}

DOS で > リダイレクションを使用して c プログラムを実行し、印刷された出力がファイルとして表示されるようにします。バッチファイルで同じことをしたいのですが、次のようなものを書くことができます

 echo %variable% >> file

しかし、それは私にはうまくいきません

@echo off
for %%i in (1 2 3) do (
set /p c=enter a name?
echo %%i
echo %c% >> file.txt
)

なにが問題ですか?

4

1 に答える 1

4

ifブロック内の変化する変数を参照しようとすると、遅延変数展開が必要になるため、これは機能しません。次のことを試すことができます。

@echo off
setlocal enabledelayedexpansion
for %%i in (1 2 3) do (
  set /p c=enter a name? 
  echo %%i
  echo !c! >> file.txt
)

cこれは、行 (この場合は完全なifステートメント) が解析されるときではなく、コードが実行されるときにのみ評価されるためです。

ただし、バッチでの C コードの単純な変換は、おそらく次のようになります。

@echo off
set /p i=
:loop
set /p j=
echo %j%
set /a j+=1
if %j% LSS %i% goto loop

Cプログラムにはプロンプトがありませんでしたが、必要に応じてプロンプトを追加できます:)。これで、バッチ プログラムの出力を全体としてパイプ処理するか>> file、適切な手段としてそこに追加することができます。

于 2009-03-23T19:06:15.673 に答える