我想在windows批处理中对一组文件执行正则表达式模式的搜索/替换。它将类似于:
if the regex matches a line matches then replace it with a new line.另外,我需要在regex中添加一个变量来替换该值。有人知道如何处理批处理脚本吗?我不是很熟悉它。一些例子可能会有所帮助。
发布于 2011-09-03 23:50:35
您可以从findstr命令中获益。它支持语法受限的正则表达式。比如说,你有一些文件
ignore_me.txt
rename_me01.txt
rename_me02.txt
rename_me03.txt
rename_me04.txt一条命令
dir /b | findstr "rename_me[0-9][0-9]"将输出
rename_me01.txt
rename_me02.txt
rename_me03.txt
rename_me04.txt好吧,不是很好的例子,因为你可以用老的?通配符来做这件事。我的观点是findstr的模式是一个正则表达式。
最近我遇到了类似的问题,但我厌倦了试图找出如何替换正则表达式模式。我甚至不确定是否可以仅使用本机Windows命令。因此,为了获得更简单但仍然是本机的解决方案,我引用了Windows Scripting Host。我的任务是查找名称中包含dd.mm.yyyy格式的日期的所有文件,并将该日期替换为当前日期。
它的脚本是:
<job>
<script language="JavaScript">
var d = new Date();
// get current date for replacement
var currDate = (d.getDate() + "." + (d.getMonth() + 1) + "." + d.getFullYear())
// add leading zeros to date and month
.replace(/^([0-9])\./g, '0$1.').replace(/\.([0-9])\./g, '.0$1.');
var fso = new ActiveXObject("Scripting.FileSystemObject");
var files = new Enumerator(fso.getFolder(".").files);
var count = 0;
for (; !files.atEnd(); files.moveNext())
{
var file = ""+files.item(); // make it string
if (file.match(/[0-9]{2}\.[0-9]{2}\.[0-9]{4}/)) {
var newName = file.replace(/[0-9]{2}\.[0-9]{2}\.[0-9]{4}/, currDate);
fso.moveFile(file, newName);
count++;
}
}
WScript.echo("Renamed "+count+" files");
</script>
</job>将其以u.wsf名称保存,并放入这些文件的文件夹中。该扩展与wscript相关联,因此当双击文件时,它将在图形用户界面模式下运行,但也可以在命令行模式下运行:
cscript u.wsf发布于 2011-09-04 00:07:24
Unix上的标准工具是sed和Perl。两者都有DOS/Windows端口。
A:\> sed -i "s/foo/bar/g" file1 file2 file3
A:\> perl -pi -e "s/foo/bar/g" file1 file2 file3将命名文件中的"foo“替换为"bar”。-i是一种成熟的编程语言,它的正则表达式功能集要好得多,但对于简单的一次性工作来说,这两种方法都可以。
https://stackoverflow.com/questions/7023460
复制相似问题