1

Как сохранить значение в переменной и загрузить эту переменную в виде нового столбца в файле, используя пакетный скрипт?

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

@echo off 
setlocal if exist three.txt del three.txt 
set cnt=1 rem get the date "01/12/15" 
for %%i in (*.csv) do ( 
if cnt>=1 ( 
for /f "skip=5 tokens=1-10 usebackq delims=," %%a in (type "%%i") do ( 
set _date=%%d 
goto :next 
) 
:next 
rem add the date to the end of every line and output to "three.txt" 
for /f "tokens=* usebackq" %%a in (type "%%i") do ( 
echo %%a,%_date%>> three.txt 
) 
) 
set /a cnt+=1 
) 
endlocal

1 ответ1

0

Я хочу, чтобы это было сделано для набора CSV-файлов в папке

Опять же, ваш командный файл поврежден разными способами.

Вам нужно научиться отлаживать свои собственные командные файлы:

Вместо того, чтобы тратить время на отладку вашего пакетного файла, я быстрее изменю пакетный файл из моего ответа на связанный вопрос, чтобы ответить на ваш новый вопрос.

Используйте следующий пакетный файл (example.cmd):

@echo off 
setlocal 
if exist three.txt del three.txt 
for /r %%i in (*.csv) do ( 
  call :process_file %%i
  )
goto :eof

:process_file
  echo processing %1
  for /f "skip=5 tokens=1-10 usebackq delims=," %%a in (`type %1`) do ( 
    set _date=%%d 
    goto :next 
  )
:next 
  rem add the date to the end of every line and output to "three.txt" 
  for /f "tokens=* usebackq" %%a in (`type %1`) do ( 
    echo %%a,%_date%>> three.txt 
    )
  ) 
endlocal

Как мне записать результаты в один и тот же CSV-файл вместо файла Three.txt?

Используйте следующий пакетный файл (example.cmd):

@echo off 
setlocal 
for /r %%i in (*.csv) do ( 
  call :process_file %%i
  )
goto :eof

:process_file
  echo processing %1
  for /f "skip=5 tokens=1-10 usebackq delims=," %%a in (`type %1`) do ( 
    set _date=%%d 
    goto :next 
  )
:next 
  rem add the date to the end of every line and output to "three.txt" 
  for /f "tokens=* usebackq" %%a in (`type %1`) do ( 
    echo %%a,%_date%>> three.txt 
    )
  )

  rem rename the file
  del %~nx1
  ren three.txt %~nx1 
endlocal

Дальнейшее чтение

  • Индекс AZ командной строки Windows CMD - Отличный справочник по всем вопросам, связанным с командной строкой Windows.
  • call - вызов одной пакетной программы из другой или вызов подпрограммы.
    • del - Удалить один или несколько файлов.
  • for /f - Циклическая команда против результатов другой команды.
  • for /r - перебирать файлы (подпапки Recurse).
  • Гото - Прямой пакетную программу для перехода к меченой линии.
  • параметры - аргумент командной строки (или параметр) - это любое значение, переданное в пакетный скрипт.
  • ren - переименовать файл или файлы.
  • type - отображать содержимое одного или нескольких текстовых файлов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .