Вы можете воспользоваться командой 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