Пакет для И Если Ошибка - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть пакетный файл для получения съемных носителей и поиска некоторых файлов на диске. Но там написано «(было неожиданно» и бомбит файл. Я не получил его. Если вы можете помочь, я был бы рад. Код:

@echo off
:findfiles
    set /a a=0
    timeout 0 /nobreak >nul 2>nul
    del /f /s /q %tmp%\asd.nctry
    wmic logicaldisk where drivetype=2 get deviceid >> "%tmp%\asd.nctry"
    for /f %%i in ("%tmp%\asd.nctry") do (
        if "a==0" (
            set /a a+=1
            goto findfiles
        )
        call :search %%i
    )

:search
    for /r "%~1" %%l in (
        "*.txt"
        "*.docx"
        "*.docm"
        "*.dotx"
        "*.dotm"
        "*.docb"
        "*.ppt"
        "*.pptx"
    ) do (
        echo %%l
    )
    exit /b

Спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Почему бы не сделать это следующим образом:

@Echo Off
For /F "Skip=1 Delims=" %%A In (
    'WMIC LogicalDisk Where "DriveType='2'" Get DeviceID 2^>Nul'
) Do For %%B In (%%A
) Do Where /R %%B\ *.txt *.docx *.docm *.dotx *.dotm *.docb *.ppt *.pptx
Pause

Вы можете добавить 2>Nul в конец командной строки Where, если вы не хотите знать о несоответствиях

0 голосов
/ 25 апреля 2018
    if "a==0" (

неверный синтаксис.Здесь оператор if будет интерпретировать указанное в кавычках выражение как строку, а ( появляется там, где ожидается оператор сравнения, следовательно, бомба.

Выражение должно быть

if %a%==0 (

То есть, если содержимое a (wtg с именами переменных) идентично 0.

Обратите внимание, что когда цикл for ... %%i... завершится, пакет просто продолжитсяк следующему утверждению - он не имеет понятия разделов.вам понадобится goto :eof перед меткой :search для завершения процедуры (или оператор exit).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...