командный файл findstr, как? - PullRequest
       31

командный файл findstr, как?

1 голос
/ 14 февраля 2020

Я пишу командный файл:

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
@REM Set defaults
SET BASE_FLDR=.\
SET BLD_TYPE=Release
@REM Check if base folder specified, if not default to current location
IF NOT [%1] == [] SET BASE_FLDR=%1
@REM Check if build type specified, if not default to Release
IF NOT [%2] == [] SET BLD_TYPE=%2
@REM Display parameters
ECHO Base folder: %BASE_FLDR%
ECHO Build type : %BLD_TYPE%
@REM Create list of subfolders to search
FOR /F "delims=" %%F IN ('DIR %BASE_FLDR% /S /B /A:D') DO (
    ECHO [%%F] | FINDSTR /E /X /IC:"%BLD_TYPE%" [%%F] >NUL && (
        ECHO %%F
    )
)

Я хочу вызвать командный файл так:

copydlls ./ Release

Я хочу командный файл чтобы использовать аргумент командной строки 1 (% 1) для указания начального местоположения,% 2 будет либо «Отладка», либо «Выпуск», этот синтаксический анализ аргументов в порядке.

В l oop I я пытаюсь использовать FINDSTR, чтобы найти все подпапки, которые заканчиваются на имя папки, указанное в% 2.

Этот бит неверен и мне нужна помощь.

Пока мой Код будет правильно захватывать папки, если папка содержит пробелы, которые исправляет [], но теперь она не соответствует концу строки.

1 Ответ

0 голосов
/ 14 февраля 2020

Вместо использования if %errorlevel% попробуйте if !errorlevel!, потому что процентное расширение оценивается при анализе блока перед его выполнением.

Но это не поможет, так как ваш код поврежден. Findstr /X никогда не может совпадать, потому что /X полная строка должна совпадать, не может быть истинной только для BLD_TYPE.

Кстати. это можно было бы просто переместив через findstr в FOR l oop.

FOR /F "delims=" %%F IN ('"DIR %BASE_FLDR% /S /B /A:D | FINDSTR /E /IC:"%BLD_TYPE%" "') DO (
   echo #1 %%F
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...