batch-file - 在 BATCH 中仅保留部分文件名
问题描述
关于这个问题,我正在尝试调整建议的脚本以适应变化的需求,但失败了。这是上下文:
- 下面的脚本解析一组名称为
EventLog_12345.txt
- 在每个文件中,它标识包含字符串 vVariable 的行(示例
2018-06-22 08:21:19 0133 LET vVariable = 'h**ps://somedomain.com/test/joblog.XML'
) - 它获取此行末尾的 URL 的文件名 (
joblog
) 将文件保存为具有新名称的新文件:
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
非常感谢!
解决方案
在最里面的for /F
循环中,更改"%%A"
为"%%~A"
or "%%~fA"
。原样,您包含空格的文件名填充%%A
有引用的结果。因此,for /F
可能正在尝试执行以下操作:
findstr /I "vVariable" ^<""Worker FFM Generator.qcc.2018""
...这是不正确的。添加波浪号将去掉内部引号(如果存在),保持显式引号有效。
以供将来参考,使用@echo on
可以帮助您追踪诸如此类的简单错误,让您查看脚本在哪些地方没有按预期运行。
如果您的脚本与您的日志文件不在同一目录中,您还应该在pushd directoryname
下面添加@echo off
,将包含“Worker FFM Generator 等”的目录的名称放入其中。代替directoryname
. 如果您需要脚本递归搜索文件,请将/S
开关添加到findstr
.
推荐阅读
- google-cloud-ml - 如何修复在 google cloud ml-engine 作业上过时的 setuptools
- .net - 如何在 Rider 中触发文件更改的设计时构建?
- jmeter - 如何在 jmeter 中通过电子邮件发送测试结果文件
- c# - 如何修复对 websocket 的异步请求和响应
- android - RecylerView 滚动不适用于 api 22
- python - 使用 Cloud Functions 将 Excel 文件从 FTP 提取到 BigQuery
- javascript - 如何为表单集创建动态 Json 并获取值并绑定以显示值?
- node.js - 如何使用 Node.js 逐字符读取文件
- php - 带有 cdata 字符串的 simplexml_load_string 警告和错误
- ios - 关于自定义 RxSwift Observable 扩展的问题