批处理:如何为文件夹中的所有文件运行程序以及如何使用原始文件名为结果创建输出文件?

时间:2016-07-27 14:30:32

标签: bash batch-file for-loop command-line treetagger

我是批量编程的菜鸟,请原谅我这个简单的问题。

我在 C:\ TTG \ FSC 中有一个名为FSC的文件夹,其中有成千上万的文本文件,如 1_A.txt 2_A.txt 等 我想运行一个程序,并将其输出放在另一个文件中,重命名原始程序(例如,1_A.txt将有一个名为 1_A_out.txt 的输出文件)。我已经测试过在1个文件上运行程序并且它可以工作(只需在命令行上写 tag-french filename )。

那么如何创建for循环来解析文件夹中的每个文件并创建输出文件?

我已经尝试了这个,但它没有工作

for /F %%i in ('dir /b "c:\treetagger\FSCB1\"') do
tag-french %%i > %%i_out

我可以在ubuntu中写这个:

for l in /home/sp/Desktop/FSCM5/*
do
  echo $l
  filename=$(basename "$l")
  extension="${filename##*.}"
  filename="${filename%.*}"
  filename=($(echo "/home/sp/Desktop/FSCM5TTG/"$filename"_"ttg"_."$extension))
  echo $filename
  sh /home/sp/Desktop/TTG/cmd/tree-tagger-french $l > $filename
done

但我想在Windows中学习如何做到这一点

1 个答案:

答案 0 :(得分:0)

我成功地测试了这个:

for /F "delims=" %%i in ('dir /b "c:\treetagger\FSCB1\*.*"') do tag-french "%%i" > "%%i_out"

我必须使用delims=选项来保留文件名,即使它们包含空格 编辑:需要在循环变量之前放置选项。