使用其内容中的字符串重命名文本文件

时间:2017-05-05 15:13:22

标签: batch-file file-rename

我在一个3年前的问题中查看了这个问题,但无法使批处理脚本适应我的案例:Rename text files based on multiple strings in their contents

这是我的文本文件包含的内容:

<!-- ===============================================
TEXT TEXT"
===============================================
An : ONE
Ca : ONE - AVRIL 2016 
Site : example.com -->

<!--===============================================
Insertion : example.com - Bannières Mobile 300X250 VF (300x250)

我想用Insertion :行包含的内容重命名每个文件。在我的示例中,它将是:example.com - Bannières Mobile 300X250 VF (300x250)

我尝试使用这个脚本,因为它使用日期和时间原始问题,但我不知道如何使其工作

setlocal enabledelayedexpansion
REM for all files do:
for %%f in (*.txt) do (
  REM get desired lines and set variables:
  for /f "tokens=2,4 delims=:" %%i in (' findstr "^Insertion" %%f') do set %%i=%%j
  REM construct filename:
  set "name=!Insertion!.txt"
  echo Filename is: "!name!"
)

有人可以帮我调整代码吗?

1 个答案:

答案 0 :(得分:0)

也许这样的事情可以做到:

For /F "Tokens=1,2*Delims=:" %%A In ('FindStr/LBIC:"Insertion : " *.txt'
) Do For /F "Tokens=*" %%D In ("%%~C"
) Do If Not Exist "%%~D%%~xA" Ren "%%A" "%%~D%%~xA"

如果你遇到循环问题,(循环读取它刚刚重命名的文件),那么添加一个额外的小步骤:

For /F "Tokens=1,2*Delims=:" %%A In ('FindStr/LBIC:"Insertion : " *.txt'
) Do For /F "Tokens=*" %%D In ("%%~C"
) Do If Not Exist "%%~D%%~xA_" Ren "%%A" "%%~D%%~xA_"
Ren *.txt_ *.txt

注意:如果您更改*.txt以包含完整路径,则需要调整令牌以满足附加分隔符