文件夹中一组 csv 文件的 Bat 脚本

文件夹中一组 csv 文件的 Bat 脚本

如何使用批处理脚本将值存储在变量中并将该变量作为新列加载到文件中?

上面的链接用于读取日期字段并将其写入 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

我希望对文件夹中的一组 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

进一步阅读

  • Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
  • 称呼- 从另一个批处理程序调用一个批处理程序,或者调用子程序。
    • 德尔- 删除一个或多个文件。
  • 对于/f- 循环命令以执行另一个命令的结果。
  • 对于/r- 循环遍历文件(递归子文件夹)。
  • - 指示批处理程序跳转到标记的行。
  • 参数- 命令行参数(或参数)是传递到批处理脚本的任何值。
  • - 重命名一个或多个文件。
  • 类型- 显示一个或多个文本文件的内容。

相关内容