![Как обрабатывать файлы с чисто числовым расширением [regex] Windows](https://rvso.com/image/1443803/%D0%9A%D0%B0%D0%BA%20%D0%BE%D0%B1%D1%80%D0%B0%D0%B1%D0%B0%D1%82%D1%8B%D0%B2%D0%B0%D1%82%D1%8C%20%D1%84%D0%B0%D0%B9%D0%BB%D1%8B%20%D1%81%20%D1%87%D0%B8%D1%81%D1%82%D0%BE%20%D1%87%D0%B8%D1%81%D0%BB%D0%BE%D0%B2%D1%8B%D0%BC%20%D1%80%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%B8%D0%B5%D0%BC%20%5Bregex%5D%20Windows.png)
Windows, пакет. Я хочу обрабатывать файлы пакетом для цикла. Проблема в следующем: я понятия не имею, какое именно расширение будет. Я знаю, что это будет число.
Итак, я пытаюсь создать что-то вроде этого:
@echo off
For %%X in ("%cd%\*.[0-9]+") do (
processFile.vbs %%X %%X.csv
sed -i s/\/t/;/g %%X.csv
sed -i s/,/:/g %%X.csv
)
Но регулярное выражение, которое я вставил в цикл for, похоже, не работает в Windows.
решение1
Вам необходимо передать dir
вывод команды в findstr
, который поддерживаетограниченный наборрегулярных выражений. Источник:Пакетный скрипт для удаления файлов на основе регулярного выражения findstr
К сожалению, +
токен не поддерживается, поэтому вот мой лучший выход (спасибо,Скотт!):
@echo off
for /f "tokens=*" %%X in ('dir /b ^| findstr /r /e \.[0-9][0-9]*') do (
processFile.vbs %%X %%X.csv
sed -i s/\/t/;/g %%X.csv
sed -i s/,/:/g %%X.csv
)
/r
swicth говоритfindstr
искать с помощью регулярных выражений/e
переключатель соответствует шаблону в конце строки
Также findstr
являетсяполный причуд, так что вы предупреждены.