关于this问题,我试图将建议的脚本调整为已更改的需求,但是失败了。这是上下文:
EventLog_12345.txt
的文件2018-06-22 08:21:19 0133 LET vVariable = 'h**ps://somedomain.com/test/joblog.XML'
)joblog
)获得URL的文件名将文件另存为新文件,名称为:joblog_12345.txt
以下是推荐的帖子中建议的脚本,它可以完成工作。
:: Q:\Test\2018\05\22\SO_50982243.cmd
@Echo off & Setlocal EnableDelayedExpansion
For /f "delims=" %%A in ('findstr /I /M "vVariable" *_*.txt ') Do (
For /f "tokens=2delims=_" %%B in ("%%~nA") Do (
For /f "delims=" %%C in ('findstr /I "vVariable" ^<"%%A"') Do Set "Line=%%C"
Set "Line=!Line:/= !"
For %%D in (!Line!) Do Set "NewName=%%~nD_%%B%%~xA"
Echo Ren "%%~A" "!NewName!"
)
)
但是,当我尝试对一组具有不同名称的文件执行相同的操作时,我拼命失败(我花了*_*.txt
来完成此操作,但是没有成功。)
Worker FFM Generator.qcc.2018_06_24_14_46_55.txt
,直到数字开始为止的所有内容都是一个常数-因此文件名仅在数字部分有所不同。最终,我想将一个新文件(从上面拾取示例行)另存为joblog_2018_06_24_14_46_55.txt
非常感谢!
答案 0 :(得分:2)
在最里面的for /F
循环上,将"%%A"
更改为"%%~A"
或"%%~fA"
。照原样,您的包含空格的文件名将用引用的结果填充%%A
。因此,for /F
可能正在尝试执行以下操作:
findstr /I "vVariable" ^<""Worker FFM Generator.qcc.2018""
...这是不正确的。添加波浪号将去除内部引号(如果存在),从而使您的显式引号有效。
供以后参考,使用@echo on
可以帮助您查找诸如此类的简单错误,从而使您看到脚本在哪些地方表现不正常。
如果脚本与日志文件不在同一目录中,则还应在pushd directoryname
下添加@echo off
,并在其中包含“ Worker FFM Generator等”的目录名称。代替directoryname
。如果您需要脚本来递归搜索文件,请将/S
开关添加到findstr
。