Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
For loop 根据目录中包含的文本重命名目录中的所有文件_For Loop_Batch File_Batch Rename - Fatal编程技术网

For loop 根据目录中包含的文本重命名目录中的所有文件

For loop 根据目录中包含的文本重命名目录中的所有文件,for-loop,batch-file,batch-rename,For Loop,Batch File,Batch Rename,我试图循环遍历文件夹中的所有.lss文件,并获取两个标记之间的字符串,保存该值并使用该字符串重命名文件 例如: 42982934829.lss -> contains string: <surveyls_title><![CDATA[J.3200-1118 - Project Title]]></surveyls_title> Rename to `J.3200-1118 - Project Title.lss` 这是我到目前为止的资料,但我担心我

我试图循环遍历文件夹中的所有.lss文件,并获取两个标记之间的字符串,保存该值并使用该字符串重命名文件

例如:

42982934829.lss -> contains string:

<surveyls_title><![CDATA[J.3200-1118 - Project Title]]></surveyls_title>

Rename to `J.3200-1118 - Project Title.lss`
这是我到目前为止的资料,但我担心我的语法严重错误

@Echo off
Set Folder=X:\RenameTest
Set Files=*.lss
PushD %Folder%

For %%A in (%Files%) Do For /f %%B IN (
  'findstr "<surveyls_title>.*</surveyls_title>" "%ProjectTitle%"'
    ) Do Call :Rename ..
PopD
Goto :Eof

:Rename
Echo Ren %1 "%ProjectTitle%"

我想这就是你想要的

@echo off
pushd "X:\RenameTest"
for %%a in (*.lss) do for /f "tokens=3*delims=[]" %%i in ('type "%%a" ^| find "</surveyls_title>"') do echo ren "%%~a" "%%~i%%~xa"
popd

一旦您对打印结果满意,就从行中删除echo。

我想这就是您想要的

@echo off
pushd "X:\RenameTest"
for %%a in (*.lss) do for /f "tokens=3*delims=[]" %%i in ('type "%%a" ^| find "</surveyls_title>"') do echo ren "%%~a" "%%~i%%~xa"
popd

一旦您对打印结果满意,只需从行中删除echo即可。

您还可以使用正则表达式提取标题:

@回声关闭&color 0A 标题使用正则表达式提取标题 设置InputFile=42982934829.lss 调用:提取标题%InputFile%Title 回显%Title% 暂停和退出 ::-------------------------------------------- :摘录标题 echo WScript.StdOut.WriteLine Extract_TitleData^ 回波函数提取_TitleData^ echo Data=WScript.StdIn.ReadAll echo Set re=New RegExp echo re.Global=True echo re.IgnoreCase=真 echo re.Pattern=\[CDATA\[.*?\]\] 重复执行数据中的每个匹配的回显^ echo Title=Match.SubMatches0^ 下一个回声 echo Extract_Title=标题 回波结束函数 >%tmp%\%~n0.vbs 对于'cscript/nologo%tmp%\%~n0.vbs^<%1'中的/f delims=%A,请设置%2=%A 如果存在%tmp%\%~n0.vbs Del%tmp%\%~n0.vbs 退出/B ::--------------------------------------------
还可以使用正则表达式提取标题:

@回声关闭&color 0A 标题使用正则表达式提取标题 设置InputFile=42982934829.lss 调用:提取标题%InputFile%Title 回显%Title% 暂停和退出 ::-------------------------------------------- :摘录标题 echo WScript.StdOut.WriteLine Extract_TitleData^ 回波函数提取_TitleData^ echo Data=WScript.StdIn.ReadAll echo Set re=New RegExp echo re.Global=True echo re.IgnoreCase=真 echo re.Pattern=\[CDATA\[.*?\]\] 重复执行数据中的每个匹配的回显^ echo Title=Match.SubMatches0^ 下一个回声 echo Extract_Title=标题 回波结束函数 >%tmp%\%~n0.vbs 对于'cscript/nologo%tmp%\%~n0.vbs^<%1'中的/f delims=%A,请设置%2=%A 如果存在%tmp%\%~n0.vbs Del%tmp%\%~n0.vbs 退出/B ::--------------------------------------------
兴趣字符串是否总是在一个单独的行中?总是只有一个标签吗?项目标题可以单独包含括号[/]吗?项目标题是否包含对文件名无效的字符?感兴趣的字符串是否总是在单独的一行中?总是只有一个标签吗?项目标题可以单独包含括号[/]吗?项目标题是否包含对文件名无效的字符?