пакетный файл, эквивалентный для этого кода - PullRequest
2 голосов
/ 23 марта 2009

HI я хочу реализовать этот код C в пакетном файле

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

Я бы запустил программу c, используя> перенаправление в DOS, чтобы печатный вывод пришел ко мне в файл. Я хочу сделать то же самое в моем командном файле, где я мог бы написать что-то вроде

 echo %variable% >> file

но у меня это не работает

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

что не так?

1 Ответ

4 голосов
/ 23 марта 2009

Это не может работать, так как вам нужно замедленное расширение переменной, когда вы пытаетесь обратиться к изменяющейся переменной в блоке 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

Вы можете добавлять подсказки, если хотите, хотя в программе на Си их тоже не было :). И теперь вы можете передать вывод пакетной программы в целом или просто добавить >> file туда для хорошей меры.

...