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

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

Olá, sou bastante novo em arquivos em lote, desculpe se esta pergunta parece estúpida, mas realmente preciso de ajuda.

Portanto, preciso do meu script em lote para verificar se ele está em uma pasta especificada, %userprofile%\Desktoppor exemplo. Não quero que ele se preocupe com seu próprio nome de arquivo. Não tenho absolutamente nenhuma ideia por onde começar. Eu sei como obter o caminho/nome do arquivo atual, etc., mas isso é tudo que sei. Como faço para o programa comparar seu caminho atual com o caminho que desejo ver se ele está? 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

Responder1

Não há necessidade de se desculpar, pois a questão que você levantou é mais complicada do que você provavelmente espera.

Solução

É assim que você pode testar se seu arquivo em 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

  • forma alternativa de normalizar o caminho (e minha favorita) é:

    pushd "%~dp0"
    set BATCH_PATH=%CD%
    popd
    
    • de qualquer forma, você provavelmente desejará remover qualquer trailing \, que é uma das coisas que a normalização faz por você
  • use %~dp0variável em vez de %cd%, porque a última semântica éa pasta em que seus scripts operamenquanto o primeiro éa pasta em que seu script está localizado(que foi o que você pediu)

    • %0fornece a localização do seu script em lote
    • adicionando dp(ou seja %dp0) você pedediscoecaminhoque omite o nome do arquivo e a extensão (que é algo como example.bate seria um fardo na próxima etapa - verificação de igualdade)
    • ao adicionar ~você pede para remover qualquer abertura ou fechamento, "se necessário (ou seja, o caminho continha espaço)
  • os caminhos são agrupados "para evitar erros devido ao possível espaço na string do caminho


Não é tão simples como se poderia pensar, certo?

Responder2

Exemplo mínimo de trabalho usando %cd%:

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

Usando 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
)

Já que você disse que não tem ideia por onde começar, aqui está um bom material de leitura: https://en.wikibooks.org/wiki/Windows_Batch_Scripting

informação relacionada