Расширенное сопоставление файлов 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, прочтите руководство