Расширенное сопоставление файлов Windows
Я пытаюсь использовать пакетный файл для списка файлов в каталоге, так что только имя файла (минус расширение) соответствует только числовым шаблонам, например. что-то вроде 125646543.pdf, которое было бы легко выразить как регулярное выражение [\ d] + \. pdf, но, конечно, у меня нет таких тонкостей с механизмами только для Windows... Я пытаюсь сделать это с помощью Windows- только механизмы, поскольку я не могу установить что-либо еще на целевых серверах, и его необходимо поддерживать хотя бы на Windows Server 2000 и 2003.
Я возьму конкретное решение для этого конкретного примера или что-то более общее, у которого есть что-то более продвинутое, чем просто вы olde * и?
Я уже пытался работать с set/a, чтобы добавить номер в имя файла, но поскольку он интерпретирует строки как переменные окружения и 0, если они не определены, это не работает. Я также пробовал использовать, если %% ~ na GTR 0, но соответствует именам текстовых файлов, например report.pdf, так как в этом случае похожее сравнение строк.
Ответы
Ответ 1
findstr
может делать регулярные выражения под Windows просто отлично. Я бы попробовал:
dir /b | findstr /i "^[0-9][0-9]*\.pdf$"
"dir /b"
дает только имена файлов, по одному на строку. Регулярное выражение соответствует одной или нескольким цифрам, за которыми следует период, за которым следует желаемое расширение. Для любого расширения вы можете:
dir /b | findstr "^[0-9][0-9]*\.[^\.]*$"
Очевидно, что если есть другие случаи, более сложные, вы можете настроить регулярное выражение. Он не имеет полной мощности UNIX-выражений, но он достаточно хорош.
Следующий командный файл показывает, как вы можете обрабатывать каждый PDF файл в текущем каталоге, который соответствует вашему "все-числовому" требованию.
@echo off
setlocal enableextensions enabledelayedexpansion
for /f "usebackq" %%i in (`dir /b ^| findstr /i "^[0-9][0-9]*\.PDF$"`) do (
set fspec=%%i
echo.Processing !fspec!
)
endlocal
Сайт http://www.robvanderwoude.com/batchfiles.php - очень хороший ресурс для магии файлов CMD (и многое другое).
Ответ 2
окна предоставили вам улучшенный инструмент программирования с win98. Его называют vbscript.
Set objFS = CreateObject("Scripting.FileSystemObject")
strFolder = "c:\test"
Set objFolder = objFS.GetFolder(strFolder)
For Each strFile In objFolder.Files
strFileName = strFile.Name
strExtension = objFS.GetExtensionName(strFile)
strBase = objFS.GetBaseName(strFile)
If IsNumeric(strBase) Then 'check if numeric
WScript.Echo strBase
'continue to process file here.......
End If
Next
для получения дополнительной информации о vbscript, прочтите руководство