Como verificar se o arquivo de lote atual está em uma pasta específica?

4

Oi eu sou relativamente novo para arquivos em lote, então desculpe se esta pergunta parece estúpida, mas eu realmente preciso de ajuda.

Então eu preciso do meu script em lote para verificar se ele está em uma pasta especificada, digamos %userprofile%\Desktop por exemplo. Eu não quero que ele se importe com o seu próprio nome de arquivo. Eu não tenho absolutamente nenhuma idéia de por onde começar. Eu sei como obter o caminho atual / nome de arquivo etc, mas isso é tudo que eu sei. Como faço o programa comparar seu caminho atual com o caminho que desejo ver se está em? Ou existe outro método mais eficiente?

O que eu quero alcançar é assim:

if this file is in Desktop folder(
    echo It's here
)else(
    echo It's not here
)

Qualquer ajuda é apreciada, obrigado a todos

    
por Mantis Tsai 20.08.2018 / 16:53

2 respostas

2

Não é preciso se desculpar, pois a pergunta que você fez é mais complicada do que você espera.

Solução

É assim que você pode testar se o seu arquivo de lote está localizado em uma pasta específica, no seu caso na pasta Desktop:

@echo off

:: Normalize this batch script's path
set BATCH_PATH=%~dp0
set BATCH_PATH=%BATCH_PATH:~0,-1%

:: Test for equality
if "%BATCH_PATH%"=="%USERPROFILE%\Desktop" (
    echo This file is on Desktop.
) else (
    echo This file is not on Desktop.
)

Coisas a serem observadas

  • caminho alternativo para normalizar o caminho (e meu favorito) é:

    pushd "%~dp0"
    set BATCH_PATH=%CD%
    popd
    
    • em qualquer caso, você provavelmente deseja remover qualquer \ , que é uma das coisas que a normalização faz para você
  • use a variável %~dp0 em vez de %cd% , porque a última semântica é a pasta em que seus scripts operam enquanto a primeira é a pasta em que seu script está localizado (que é o que você pediu)

    • %0 fornece seu local de script em lote
    • adicionando dp (ou seja, %dp0 ) você solicita disco e caminho que omite o nome do arquivo e a extensão (que é algo como example.bat e seria fardo no próximo passo - verificação da igualdade)
    • ao adicionar ~ , peça para remover qualquer abertura ou fechamento " , se necessário (ou seja, o caminho contido no espaço)
  • os caminhos estão agrupados em " para evitar erros devido a possíveis espaços na cadeia de caminho

Não tão simples como se pensaria, certo?

    
por 20.08.2018 / 17:51
0

Exemplo de trabalho mínimo usando %cd% :

IF %cd%==%userprofile%\Desktop (
    ECHO It's here
) ELSE (
    ECHO It's not here
)

Usando a variável intermediária:

FOR /F "tokens=*" %%a in ('cd') do SET CURRENT_DIR=%%a
IF %CURRENT_DIR%==%userprofile%\Desktop (
    ECHO It's here
) ELSE (
    ECHO It's not here
)

Como você disse que não sabe por onde começar, aqui está um bom material de leitura: link

    
por 20.08.2018 / 17:08