Я знаю, що %0
містить повний шлях пакетного сценарію, наприкладc:\path\to\my\file\abc.bat
Я хотів би path
бути рівнимc:\path\to\my\file
Як я міг цього досягти?
Я знаю, що %0
містить повний шлях пакетного сценарію, наприкладc:\path\to\my\file\abc.bat
Я хотів би path
бути рівнимc:\path\to\my\file
Як я міг цього досягти?
Відповіді:
%~dp0
буде каталог. Ось деяка документація щодо всіх модифікаторів шляху . Розваги :-)
Для видалення остаточної косої риски можна використовувати :n,m
синтаксис підрядкових рядків, наприклад:
SET mypath=%~dp0
echo %mypath:~0,-1%
Я не вірю, що , на жаль, існує спосіб поєднати %0
синтаксис із :~n,m
синтаксисом.
%~0\..
- знав, що повинен бути кращий спосіб! Крім того, ви, ймовірно, захочете укласти %~dp0
подвійні лапки ( ""
) у випадку, якщо у назві каталогу є пробіли тощо.
%~dp0
містить `` в кінці. У вас є ідея, як її зняти?
SET msg=hello world
працює чудово). Однак, використовуючи% mypath% в іншому місці, ви хочете бути обережними, щоб використовувати його в лапках, хоча вони не потрібні cd
ні для одного.
Ви можете використовувати наступний скрипт, щоб отримати шлях без останнього "\"
for %%i in ("%~dp0.") do SET "mypath=%%~fi"
%~dp0
може бути відносним шляхом. Щоб перетворити його на повний шлях, спробуйте щось подібне:
pushd %~dp0
set script_dir=%CD%
popd
%~dp0
безпосередньо?
%~dp0
може бути відносною, що може бути, а може бути і проблемою, залежно від випадку використання
%~dp0
не може містити відносний шлях, d
позначає диск та p
шлях, яким чином диск може бути відносним?
%~dp0
це буде абсолютний шлях навіть тоді, коли сценарій запускався як відносний шлях. Завдяки коментарю jeb, ця відповідь мене не обдурила. Чому люди просто складають речі та йдуть і починають поширювати свою дику фантазію на інших. У мене є цей колега, який це робить, але я звинувачував його (молодий) вік. Я хотів би, щоб мій голос був підрахований.
Ви можете використовувати %~dp0
, d означає лише диск, p означає лише шлях, 0 - аргумент для повного імені пакетного файлу.
Наприклад, якщо шлях до файлу дорівнював C: \ Users \ Oliver \ Desktop \ example.bat, то аргумент дорівнював би C: \ Users \ Oliver \ Desktop \, також ви можете використовувати команду set cpath=%~dp0 && set cpath=%cpath:~0,-1%
та використовувати %cpath%
змінну для видалення останньої косої риски.
%cd%
дасть вам шлях до каталогу, звідки працює сценарій.
Просто запустіть:
echo %cd%
%CD%
це поточна робоча папка, а не папка, в якій зберігається пакетний файл. Вони можуть бути одного і того ж місця, але часто їх немає.
Це була б %CD%
змінна.
@echo off
echo %CD%
%CD%
повертає поточний каталог, у якому знаходиться пакетний сценарій.
CD C:\Temp <CR> ECHO %CD%
( <CR>
це новий рядок ...)
Я працюю на машині під керуванням Windows 7, і я в кінцевому підсумку використовую рядки нижче, щоб отримати абсолютний шлях до папки для мого сценарію bash.
Я дійшов до цього рішення, переглянувши http://www.linuxjournal.com/content/bash-parameter-expansion .
#Get the full aboslute filename.
filename=$0
#Remove everything after \. An extra \ seems to be necessary to escape something...
folder="${filename%\\*}"
#Echo...
echo $filename
echo $folder