4

Привет, я довольно новичок в пакетных файлах, так что извините, если этот вопрос кажется глупым, но мне действительно нужна помощь.

Поэтому мне нужен мой пакетный скрипт, чтобы проверить, находится ли он в указанной папке, например, %userprofile%\Desktop . Я не хочу, чтобы он заботился о собственном имени файла. Я понятия не имею, с чего начать. Я знаю, как получить текущий путь / имя файла и т.д., Но это все, что я знаю. Как заставить программу сравнивать свой текущий путь с путем, который я хочу увидеть, если он находится? Или есть другой, более эффективный метод?

То, что я хочу достичь, это так:

if this file is in Desktop folder(
    echo It's here
)else(
    echo It's not here
)

Любая помощь приветствуется, спасибо всем

2 ответа2

2

Не нужно извиняться, потому что вопрос, который вы подняли, сложнее, чем вы, вероятно, ожидаете.

Решение

Вот как вы можете проверить, что ваш пакетный файл находится в определенной папке, в вашем случае в папке Desktop:

@echo off

:: Normalize this batch script's path
set BATCH_PATH=%~dp0
set BATCH_PATH=%BATCH_PATH:~0,-1%

:: Test for equality
if "%BATCH_PATH%"=="%USERPROFILE%\Desktop" (
    echo This file is on Desktop.
) else (
    echo This file is not on Desktop.
)

Что стоит отметить

  • Альтернативный способ нормализации пути (и мой любимый) это:

    pushd "%~dp0"
    set BATCH_PATH=%CD%
    popd
    
    • в любом случае, вы, вероятно, захотите удалить любой трейлинг \ , что является одной из вещей, которые нормализация делает для вас
  • используйте переменную %~dp0 вместо %cd% , потому что последняя семантика - это папка, в которой работают ваши скрипты, а первая - папка, в которой находится ваш скрипт (о чем вы просили)

    • %0 дает вам местоположение вашего пакетного скрипта
    • добавив dp (то есть %dp0), вы запрашиваете диск и путь, в котором не указаны имя файла и расширение (что-то вроде example.bat и на следующем шаге это будет обременительно - проверка на равенство)
    • добавив ~ вы просите удалить любое открытие или закрытие " если необходимо (то есть путь содержит пробел)
  • пути обернуты в " чтобы предотвратить ошибки из-за возможного места в строке пути


Не так просто, как можно было бы подумать, верно?

0

Минимальный рабочий пример с использованием %cd%:

IF %cd%==%userprofile%\Desktop (
    ECHO It's here
) ELSE (
    ECHO It's not here
)

Используя промежуточную переменную:

FOR /F "tokens=*" %%a in ('cd') do SET CURRENT_DIR=%%a
IF %CURRENT_DIR%==%userprofile%\Desktop (
    ECHO It's here
) ELSE (
    ECHO It's not here
)

Поскольку вы сказали, что не знаете, с чего начать, вот хороший материал для чтения:https://en.wikibooks.org/wiki/Windows_Batch_Scripting

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .