Я знаю, що %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