Как найти текущий каталог пакетного файла, а затем использовать его для пути?
У меня есть пакетный файл, который я намерен распространять среди наших клиентов для запуска программного обеспечения.
Мы распространяем их как папку или .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"
который должен установить переменную в ваше местоположение пакета.