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

У меня здесь есть партия:

FOLDER 1\BATCHES\batch1.bat

который использует программу, которая находится в:

FOLDER 1\PROGRAMS\pro.exe 

и моя партия выглядит так:

"%SYSTEMDRIVE%\Temp\FOLDER 1\PROGRAMS\pro.exe" --input "%SYSTEMDRIVE%\Temp\FOLDER 1\SCRIPT\script.srpt" --output "%SYSTEMDRIVE%\Temp\FOLDER 1\FILES\myfile.x"

как вы можете видеть, что он заблокирован в месте с %SYSTEMDRIVE%\Temp\ поэтому, чтобы сделать мой скрипт "переносимым", есть ли что-то, что я мог бы заменить этим %SYSTEMDRIVE%\Temp\?

или, говоря другими словами: я хотел бы удалить все экземпляры %SYSTEMDRIVE%\Temp\ из моей партии и заменить его чем-то таким образом, чтобы, если я переместил свою FOLDER 1 куда-нибудь на моем ПК, он запустился

2 ответа2

0
  • Папка, в которой находится пакет, может быть получена с помощью %~dp0 (с обратной косой чертой)
  • Файловая система заботится об относительных папках, обозначенных .. означает один уровень вверх.

В tree A: /F так:

A:.
└───Folder 1
    ├───BATCHES
    │       batch1.bat
    │
    ├───FILES
    │       myfile.x
    │
    ├───PROGRAMS
    │       pro.exe
    │
    └───SCRIPT
            script.srpt

Эта партия:

:: A:\FOLDER 1\BATCHES\batch1.bat
@Echo off
Echo batch1 folder is: %~dp0
Echo ======================
for %%A in ("%~dp0..\PROGRAMS\pro.exe")   Do set "_Prg=%%~fA"
for %%A in ("%~dp0..\SCRIPT\script.srpt") Do set "_Inp=%%~fA"
for %%A in ("%~dp0..\FILES\myfile.x")     Do set "_Out=%%~fA"
Set _

Echo "%_Prg%" --input "%_Inp%" --output "%_Out%"

будет иметь такой вывод:

A:\> "Folder 1\BATCHES\batch1.bat"
batch1 folder is: A:\Folder 1\BATCHES\
======================
_Inp=A:\Folder 1\SCRIPT\script.srpt
_Out=A:\Folder 1\FILES\myfile.x
_Prg=A:\Folder 1\PROGRAMS\pro.exe
"A:\Folder 1\PROGRAMS\pro.exe" --input "A:\Folder 1\SCRIPT\script.srpt" --output "A:\Folder 1\FILES\myfile.x"
0

Давайте рассмотрим следующий сценарий:

d:\bat> tree /F "d:\temp\FOLDER 1"
Folder PATH listing for volume VolName
Volume serial number is ABCD-EFGH
D:\TEMP\FOLDER 1
├───BATCHES
│       batch1.bat
│
└───PROGRAMS
        pro.exe

Затем используйте ссылку %~dp0 относительно Batch Script и .. относительный путь к родительскому каталогу, как в следующем сценарии:

@echo OFF
SETLOCAL EnableExtensions
echo(
echo                                     listing "%~dp0"
dir /B /S "%~dp0"
echo                                     listing "%~dp0..\programs"
dir /B /S "%~dp0..\programs"

Выход:

d:\bat> "d:\temp\FOLDER 1\BATCHES\batch1.bat"

                                    listing "d:\temp\FOLDER 1\BATCHES\"
d:\temp\FOLDER 1\BATCHES\batch1.bat
                                    listing "d:\temp\FOLDER 1\BATCHES\..\programs"
d:\temp\FOLDER 1\programs\pro.exe

d:\bat>

Обратите внимание, что %~dp0..\PROGRAMS отличается от ..\PROGRAMS целом:

  • %~dp0..\PROGRAMS - это путь относительно каталога, в котором находится пакет
    • (d:\temp\FOLDER 1\BATCHES\ в приведенном выше примере)
  • ..\PROGRAMS - это путь относительно текущего каталога, из которого был запущен пакет
    • (d:\bat\ в приведенном выше примере)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .