como navegar no intervalo da pasta pai sem caminho completo?

0

existe uma maneira de navegar para um programa que está na pasta diferente do diretório pai sem usar o caminho completo?

atm eu tenho um lote aqui:

FOLDER 1\BATCHES\batch1.bat

que usa um programa localizado em:

FOLDER 1\PROGRAMS\pro.exe 

e meu lote se parece com isso:

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

como você pode ver que está bloqueado para um local com %SYSTEMDRIVE%\Temp\ , para tornar meu script "portátil", há algo que eu possa substituir por %SYSTEMDRIVE%\Temp\ ?

ou colocando em outras palavras: Eu gostaria de descartar todas as ocorrências de %SYSTEMDRIVE%\Temp\ do meu lote e substituí-las por algo de forma que, se eu mover minha FOLDER 1 para qualquer lugar no meu PC , será executado

    
por user902300 21.05.2018 / 15:45

2 respostas

0
  • A pasta em que o lote reside pode ser obtida com %~dp0 (com uma barra invertida à direita)
  • O sistema de arquivos cuida das pastas relativas endereçadas com .. , ou seja, um nível acima.

Em tree A: /F assim:

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

este lote:

:: 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%"

terá esta saída:

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"
    
por 21.05.2018 / 18:14
0

Vamos considerar o seguinte cenário:

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

Em seguida, use o link %~dp0 relativo ao script em lote e .. caminho relativo para o pai diretório como no script a seguir:

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

Saída :

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>

Observação de que %~dp0..\PROGRAMS difere de ..\PROGRAMS geralmente:

  • %~dp0..\PROGRAMS é o caminho relativo ao diretório em que o lote reside
    • ( d:\temp\FOLDER 1\BATCHES\ no exemplo acima)
  • ..\PROGRAMS é um caminho relativo ao diretório atual no qual o lote foi iniciado
    • ( d:\bat\ no exemplo acima)
por 21.05.2018 / 18:17