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


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

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

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

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

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

4 60

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

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

 Pushd "%~dp0"

который также принимает во внимание запуск из пути unc.

попробуйте в yourbatch

set "batchisin=%~dp0"

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