Як перевірити, чи знаходиться поточний пакетний файл у певній папці?


4

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

Тому мені потрібен мій пакетний скрипт, щоб перевірити, чи знаходиться він у вказаній папці, скажімо, %userprofile%\Desktopнаприклад. Я не хочу, щоб він піклувався про власне ім'я файлу. Я абсолютно не маю ідеї з чого почати. Я знаю, як отримати поточний шлях / ім'я файлу тощо, але це майже все, що я знаю. Як змусити програму порівнювати її поточний шлях з тим, який я хочу побачити, чи він знаходиться? Або є ще один більш ефективний метод?

Я хочу досягти такого:

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

Будь-яка допомога вдячна, дякую всім


Ви перевірили echo% cd%
user648026


1
@ user648026% cd% не відображатиме шлях пакетного файлу, а лише поточний каталог. Поточний шлях на зразок% ~ p0, але я забув точний синтаксис.
LPChip


Відповіді:


2

Не потрібно вибачатися, оскільки поставлене вами питання складніше, ніж ви, напевно, очікуєте.

Рішення

Ось як ви можете перевірити, чи ваш пакетний файл знаходиться в певній папці, у вашому випадку в папці Настільний:

@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і це буде тягарем на наступному кроці - перевірка рівності)
    • додавши, ~ви "вимагаєте видалити будь-яке відкриття або закриття, якщо це необхідно (тобто пробіг, що містить пробіл)
  • шляхи загортаються "для запобігання помилок через можливий пробіл у рядку шляху


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


Насправді це не так, дякую за відповідь та уточнення на% dp /% cd%. Я зрозумів щось під час гри, хоча це те, що коли я замінюю% USERPROFILE% \ Desktop на C: \ ProgramData \ Microsoft \ Windows \ Меню "Пуск" \ Програми \ StartUp (загальна папка запуску), схоже, виконує код незалежно від того. Я щось роблю не так?
Mantis Tsai

Будь ласка. Сценарій працює для мене правильно, якщо я перевіряю на StartUpпапку. Мені потрібно більше деталей - особливо код, що він робить і що ви очікуєте від цього.
Властиміл Овчачик

До речі, зараз є дві папки запуску a) C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUpі b) C:\Users\Admin\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup.
Властиміл Овчачик

Я використав код з відповіді нижче (я не бачу різниці, окрім того, що його відповідь не встановила шлях як змінну). Він працює на всіх тестах, які я протестував, крім будь-якої іншої папки запуску.
Mantis Tsai

Мій код: @echo off IF %~dp0 == %USERPROFILE%\Desktop\ ( ECHO It's here ) ELSE ( ECHO It's not here ) IF %~dp0 == %USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\ ( ECHO It's here ) ELSE ( ECHO It's not here ) IF %~dp0 == C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\ ( ECHO It's here ) ELSE ( ECHO It's not here ) pause
Mantis Tsai

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


1
-1, це не дає відповіді на запитання.
LPChip

1
Це все-таки вирішило мою проблему (поки що), і дякую за посилання! Я обов’язково прочитаю на ньому. Але деякі джерела стверджують, що існує різниця між% cd% і% ~ dp0, коли перші представляють інший шлях іноді? Я дещо розгублений
Mantis Tsai

2
Ця відповідь була написана часом, що не було зрозуміло, просить Мантіс про рішення %cd%чи %~dp0рішення. Назва питання запитувала шлях файлу скрипта, але тіло питання двічі цитувало "поточну директорію" і було позначене "робочий каталог". Звідси плутанина.
Властиміл Овчачик
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.