Как найти текущий каталог пакетного файла, а затем использовать его для пути?
у меня есть пакетный файл, который я намерен распространять среди наших клиентов для запуска задачи программного обеспечения.
мы распространяем их в виде папки или .zip
с файлами внутри. Внутри есть пакетные файлы и другая папка с файлами, необходимыми для запуска пакета.
обычно, когда вы делаете пакет, вы вводите путь, где находятся файлы. Но я не буду знать, где находятся файлы. Файлы по-прежнему будут храниться в главной папке, но мне нужно, чтобы пакет нашел это папка для запуска файлов.
Так, например: если у них есть главная папка на рабочем столе, и они ее запускают, это должно быть что-то вроде "C:UsersUsernameDesktop"
запустить. У вас будет пакетный компакт-диск в этом месте.
но что, если они бегут из документов? Я не знаю имя пользователя, поэтому я должен каким-то образом заставить пакет найти это. Любой код и/или инструкции было бы здорово.
4 ответа:
нет необходимости знать, где находятся файлы, потому что при запуске файла bat рабочий каталог-это каталог, в котором он был запущен ("главная папка"), поэтому если у вас есть эта структура:
.\mydocuments\folder\mybat.bat .\mydocuments\folder\subfolder\file.txt
и пользователь запускает "mybat.летучая мышь" рабочий каталог ".\mydocuments\folder", поэтому вам нужно только написать имя подпапки в вашем скрипте:
@Echo OFF REM Do anything with ".\Subfolder\File1.txt" PUSHD ".\Subfolder" Type "File1.txt" Pause&Exit
В любом случае, рабочий каталог хранится в переменной "%CD%", а каталог, в котором bat был запущен хранится на аргументе 0. Затем, если вы хотите знать рабочий каталог на любом компьютере, вы можете сделать:
@Echo OFF Echo Launch dir: "%~dp0" Echo Current dir: "%CD%" Pause&Exit
Электростудиос ответ немного вводит в заблуждение.
" при запуске файла bat рабочий каталог-это каталог, в котором он был запущен" Это верно, если пользователь нажимает на пакетный файл в проводнике.
однако, если сценарий вызывается из другого сценария с помощью команды вызова, текущий рабочий каталог не изменяется.
таким образом, внутри вашего скрипта лучше использовать %~dp0subfolder\file1.txt
обратите внимание, что %~dp0 закончится с обратной косой чертой, когда текущий скрипт не находится в текущем рабочем каталоге. Таким образом, если вам нужно имя каталога без обратной косой черты, вы можете использовать что-то вроде
call :GET_THIS_DIR echo I am here: %THIS_DIR% goto :EOF :GET_THIS_DIR pushd %~dp0 set THIS_DIR=%CD% popd goto :EOF