为文件夹中的每个.txt文件添加唯一的/(=升序)编号(使用Batch)

时间:2014-03-11 16:11:55

标签: batch-file

我有一个包含大量随机名称的.txt文件的文件夹。现在我想在文件夹中的每个文件的末尾添加一个唯一/升序号码。例如:

  

文件1命名" blah blah.txt包含内容" hello world"

     

文件2命名" blah blah blah.txt包含内容"嗨hello world"

运行.bat文件后,文件应该是:

  

文件1名为" blah blah.txt,内容为" hello world1" < - number" 1"加入

     

文件2命名" blah blah blah.txt,内容为"嗨hello world2" < - number" 2"添加等。

到目前为止我写过这一行:

FOR %%a in (*.txt) do ECHO 1>> %%a

这增加了" 1"到文件夹中的每个.txt。 从理论上讲,我必须交换" 1"带变量

3 个答案:

答案 0 :(得分:1)

如果所有文件只有一行,并且没有行以:开头,那么

@echo off
for /f "tokens=1* delims=:" %%A in (
  'dir /b /a-d *.txt ^|findstr /n "^"'
) do for /f "usebackq eol=: delims=" %%L in ("%%B") do (echo %%L%%A)>"%%B"

如果处理多行文件,并且文件中的每一行都应该附加相同的数字,那么以下修改将起作用。

@echo off
for /f "tokens=1* delims=:" %%A in (
  'dir /b /a-d *.txt ^|findstr /n "^"'
) do (
  (for /f "usebackq eol=: delims=" %%L in ("%%B") do echo %%L%%A)>"%%B.new"
  move /y "%%B.new" "%%B" >nul
)

答案 1 :(得分:0)

对于指示方案,每个文件只有一行,并且在其末尾添加了值

setlocal enableextensions disabledelayedexpansion

set "var=0"

for /r . %%a in (*.txt) do for /f "usebackq delims=" %%b in ("%%~fa") do ( 
    set "line=%%b"
    setlocal enabledelayedexpansion
    >"%%~fa" echo(!line!!var!
    endlocal
    set /a "var+=1"
)

在当前文件夹及其下方(/r .)的递归搜索中,对于每个.txt文件(%%a),对于文件中的每一行(%%b )在读取后,将读取的行放入同一个文件后,回显添加的变量。在每个循环中,变量值递增1。

循环中的setlocal/endlocal游戏旨在处理文件中文本内的特殊字符(!)

答案 2 :(得分:0)

我认为这就是你想要的:

@echo off
setlocal enabledelayedexpansion

for /f "delims=" %%a in ('dir /b /a-d *.txt') do (
  set /a inc+=1
  for /f "usebackq delims=" %%b in ("%%~fa") do (
    >"%%~fa" echo(%%b!inc!
  )
)