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