Как найти текущий каталог пакетного файла, а затем использовать его для пути?

У меня есть пакетный файл, который я намерен распространять среди наших клиентов для запуска программного обеспечения.

Мы распространяем их как папку или .zip с файлами внутри. Внутри есть пакетные файлы и другая папка с файлами, необходимыми для запуска пакета.

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

Итак, например: если у них есть главная папка на рабочем столе, и они запускают ее, она должна быть чем-то вроде "C:\Users\Username\Desktop" для запуска. У вас будет пакетный компакт-диск в этом месте.

Но что, если они запускают его из документов? Я не знаю имя пользователя, поэтому мне нужно как-то найти пакет. Любой код и/или инструкции будут отличными.

Ответ 1

Нет необходимости знать, где находятся файлы, потому что когда вы запускаете bat файл, рабочий каталог - это каталог, в котором он был запущен ( "главная папка" ), поэтому, если у вас есть эта структура:

.\mydocuments\folder\mybat.bat
.\mydocuments\folder\subfolder\file.txt

И пользователь запускает "mybat.bat", рабочий каталог ".\mydocuments\folder", поэтому вам нужно только написать имя подпапки в script:

@Echo OFF
REM Do anything with ".\Subfolder\File1.txt"
PUSHD ".\Subfolder"
Type "File1.txt"
Pause&Exit

В любом случае рабочий каталог хранится в переменной% CD%, а каталог, в котором была запущена летучая мышь, хранится в аргументе 0. Затем, если вы хотите узнать рабочий каталог на любом компьютере, который вы можете сделать:

@Echo OFF
Echo Launch dir: "%~dp0"
Echo Current dir: "%CD%"
Pause&Exit

Ответ 2

Ответ ElektroStudios немного вводит в заблуждение.

", когда вы запускаете файл bat, рабочий каталог - это каталог, где он был запущен" Это верно, если пользователь нажимает на пакетный файл в проводнике.

Однако, если script вызывается из другого script с помощью команды CALL, текущий рабочий каталог не изменяется.

Таким образом, внутри вашего script лучше использовать% ~ dp0subfolder\file1.txt

Также обратите внимание, что% ~ dp0 закончит обратную косую черту, если текущий script не находится в текущем рабочем каталоге. Таким образом, если вам нужно имя каталога без обратной обратной косой черты, вы можете использовать что-то вроде

call :GET_THIS_DIR
echo I am here: %THIS_DIR%
goto :EOF

:GET_THIS_DIR
pushd %~dp0
set THIS_DIR=%CD%
popd
goto :EOF

Ответ 3

Вы также можете сделать

 Pushd "%~dp0"

Который также берет на себя выполнение с нечеткого пути.

Ответ 4

Попробуйте в своем приложении

set "batchisin=%~dp0"

который должен установить переменную в ваше местоположение пакета.