Вернуться к началу, если ввод не введен (Bat File) (# 2) - PullRequest
2 голосов
/ 21 июля 2011

Это следующий вопрос: Вернуться к началу Если ввод не введен (Bat File) Теперь еще один последний штрих, и мой файл идеален :) Вот соответствующая часть кода:

:: Delete variable %F%
SET "F="
set /p F=Folder or a File Trget:
attrib +s +h +r %F%

Если я установил Non Input, файл делает все соответствующие файлы в одной папке и с тем же расширением (как в attrib +s +h +r *.bat), (в данном случае, bat) в системные файлы

Прошу прощения за неверную формулировку

Полная процедура этого скрипта (это не весь скрипт только на его части)

:Hide
@echo off
cls
Color 0c

ECHO.
ECHO.
:: Delete variable %F%
SET "F="
set /p F=Folder or a File Trget:
attrib +s +h +r %F%


@echo off
CLS
ECHO.
ECHO.
ECHO   ######################################################
ECHO   #                                                    #
ECHO   # 1 - Set Other System Attribute To a Folder or file #
ECHO   # 2 - Remove System Attribute From a Folder or file  #
Echo   # 3 - Exit                                           #
ECHO   #                                                    #
ECHO   ######################################################
ECHO.
ECHO.

:: Delete variable %A%
SET "A="
SET /P A=Set Your Choice And Press Enter: 
ECHO Loading .........

IF "%A%"=="1" GOTO Hide
IF "%A%"=="2" GOTO Show
IF "%A%"=="3" GOTO Exit

GOTO Hide

1 Ответ

1 голос
/ 21 июля 2011
  1. Всегда используйте имя файла, которое оно цитирует, потому что оно может содержать пробелы.
  2. Удалить кавычки из имени файла. Больше: set /?

    set F=%F:"=%
    
    1. Убедитесь, что вход не пустой. Команда 'если не "% F%" == ""' - проверяет, что ввод не пустой. Команда 'if EXIST "% F%"' проверяет, существует ли файл.

      :: Delete variable %F%
      SET "F="
      set /p F=Folder or a File Target:
      set F=%F:"=%
      
      if not "%F%"=="" if EXIST "%F%" attrib +s +h +r "%F%"
      
    2. Если у вас слишком много команд, которые невозможно выполнить без ввода, вы можете добавить процедуру в конец файла и вызвать ее

      if not "%F%"=="" if EXIST "%F%" call :HideChecked
      
      :: There are your code. Remember, that call :Label always returns back & keeps batch execution. Read more: call /?
      :: So there your code ends. And new procedure starts.
      
      :: Prevent crazy parsing
      exit /b
      
      :HideChecked
          attrib +s +h +r %F%
      :: exit /b == return back
      exit /b
      
  3. Всегда говорите пользователю, где его ошибка

    if not "%F%"=="" if EXIST "%F%" call :HideChecked
    
    if "%F%"=="" (
        echo You must choose something
        REM in 'IF ()' your can use only REM for comments.
        REM >nul - means command 'pause' will print nothing (except errors)
        pause>nul
        goto Hide
    )
    if NOT EXIST "%F%" (
        echo No such file. File list:
        REM dir /? for help
        dir /P/B
        pause>nul
        goto Hide
    )
    
  4. В начале файла добавить «Перейти к вводу». После каждой процедуры (: Hide: Show: Exit) добавляйте 'goto Input', чтобы предотвратить сумасшедший анализ.

    :: At start of file
    goto Input
    
    :: There can be some code
    
    :Show
        :: And there
    goto Input
    
    :Hide
        @echo off
        cls
        Color 0c
    
        ECHO.
        ECHO.
        :: Delete variable %F%
        SET "F="
        set /p F=Folder or a File Target:
            set F=%F:"=%
    
        if not "%F%"=="" if EXIST "%F%" call :HideChecked
        if "%F%"=="" (
            echo You must choose something
            REM in 'IF ()' your can use only REM for comments.
            REM >nul - means command 'pause' will print nothing (except errors)
            pause>nul
            goto Hide
        )
        if NOT EXIST "%F%" (
            echo No such file. File list:
            REM dir /? for help
            dir /P/B
            pause>nul
            goto Hide
        )
    
    goto Input
    
    :Input
                        @echo off
        CLS
        ECHO.
        ECHO.
        ECHO   ######################################################
        ECHO   #                                                    #
        ECHO   # 1 - Set Other System Attribute To a Folder or file #
        ECHO   # 2 - Remove System Attribute From a Folder or file  #
        Echo   # 3 - Exit                                           #
        ECHO   #                                                    #
        ECHO   ######################################################
        ECHO.
        ECHO.
    
        :: Delete variable %A%
        SET "A="
        SET /P A=Set Your Choice And Press Enter: 
    
        IF "%A%"=="1" GOTO Hide
        IF "%A%"=="2" GOTO Show
        IF "%A%"=="3" GOTO Exit
    
        echo You must choose something
        pause>nul
    
        GOTO Input
    
    :: Prevent crazy parsing
    exit /b
    
    :HideChecked
        attrib +s +h +r "%F%"
    :: exit /b == return back
    exit /b
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...