Как проверить, находится ли текущий пакетный файл в определенной папке?
Привет, я довольно новичок в пакетных файлах, так что извините, если этот вопрос кажется глупым, но мне действительно нужна помощь.
Поэтому мне нужен мой пакетный скрипт, чтобы проверить, находится ли он в указанной папке, скажем %userprofile%\Desktop
например. Я не хочу, чтобы он заботился о собственном имени файла. Я понятия не имею, с чего начать. Я знаю, как получить текущий путь / имя файла и т. Д., Но это все, что я знаю. Как заставить программу сравнивать свой текущий путь с путем, который я хочу увидеть, если он находится? Или есть другой, более эффективный метод?
То, что я хочу достичь, это так:
if this file is in Desktop folder(
echo It's here
)else(
echo It's not here
)
Любая помощь приветствуется, спасибо всем
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
и это будет бременем на следующем этапе - проверка на равенство) - добавляя
~
Вы просите удалить любое открытие или закрытие"
если необходимо (т.е. путь содержал пространство)
пути обернуты в
"
предотвратить ошибки из-за возможного пробела в строке пути
Не так просто, как можно было бы подумать, верно?
Минимальный рабочий пример использования %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