Вопрос:

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

file batch-file directory find cd

158506 просмотра

4 ответа

355 Репутация автора

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

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

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

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

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

Автор: Ryan Barber Источник Размещён: 27.04.2013 05:50

Ответы (4)


7 плюса

63562 Репутация автора

Попробуй в своей партии

set "batchisin=%~dp0"

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

Автор: Magoo Размещён: 27.04.2013 05:54

45 плюса

6106 Репутация автора

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

 Pushd "%~dp0"

Что также учитывает запуск с пути unc.

Автор: Matt Williamson Размещён: 27.04.2013 06:07

85 плюса

8056 Репутация автора

Решение

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

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

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

@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
Автор: ElektroStudios Размещён: 27.04.2013 07:15

59 плюса

716 Репутация автора

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

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

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

Таким образом, внутри вашего скрипта лучше использовать% ~ 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
Автор: Henning Размещён: 29.10.2013 05:29
Вопросы из категории :
32x32