Lote: Definir o nome da pasta de nível superior como variável

1

Ambiente: Windows 10
Pergunta: Se possível - como definimos o nome da pasta mais importante em uma unidade como uma variável?

Recebemos um disco de um terceiro que contém atualizações de um sistema que usamos. No disco, há uma pasta com o título da versão atual (por exemplo, blahblahSystemblah-2018October-finalblah ) e contém todos os dados dessa versão. Depois de colocarmos o disco no sistema, usamos o robocopy para atualizar o servidor com as alterações e, em seguida, os usuários que executam o sistema depois disso são atualizados pelo servidor. Nossos problemas atuais são que temos que configurar o nome da pasta manualmente, já que o robocopy não pode (no meu conhecimento) usar um curinga em sua origem, o nome da pasta é importante em outro lugar, então não podemos simplesmente colocá-los diretamente no disco e, idealmente, gostaríamos de não ter que mover o arquivo de lote antes de executá-lo (usar o diretório atual seria fácil, mas como eu disse: o nome da pasta é importante e estamos tentando manter qualquer entrada / esforço manual de usuários ao mínimo necessário.

A parte relevante do script ficaria assim:

@echo off
for (however you can get the top folder name automatically) do (set VRSN=however)

robocopy "D:\VRSN" "C:\local\directory" /e /mir /r:0 /w:0 /log:"C:\log\directory.txt"

A coisa mais próxima que eu encontrei para chegar lá é esse pedaço de script, onde "knownfile" é o nome de um arquivo que sempre estará na pasta:

setlocal enabledelayedexpansion

cd /d "D:\"

for /R %%G in (knownfile) do (
    set "var1=%%~dpG"
    set "var1=!var1:%CD%=!"
    if not "!var1!"=="!prev!" (
        if "!var1!"=="\" (echo .\) else echo(!var1:~1,-1!
    )
    set "prev=!var1!"
)

- mas este script mostra mais do que apenas a pasta com esse arquivo conhecido e também filma o primeiro caractere do nome da pasta. Eu serei o primeiro a admitir que não entendo completamente a sintaxe ou onde ela está dando errado, por isso, se alguém puder me indicar melhor ou me ajudar a refinar o código acima para somente retornar esse código uma pasta, seria muito apreciada.

    
por mael' 10.10.2018 / 16:07

1 resposta

0

Você pode usar algo simples como:

@ECHO off
set knownfile=D:\Folder\File.txt

for /F "delims=\ tokens=2" %%G in ("%knownfile%") do (
    set prev=.\%%G
)

ECHO %prev%

emqueavariáveldeambienteknownfileéocaminhocompletosemcotas.VocênãoprecisaativaraExpansãocomatrasoparaestasoluçãooumexercomavariáveldeambienteCD.

Comfor/R,vocêestápercorrendoumaárvoredediretórios,enquantofor/Festásimplesmenteprocessandoumastringedividindo-anocaractere\.

tokens=1dizparausaraprimeirapartedastring.Sevocêquiserusarqualquerpastadepoisdisso,poderáfazerissousandotokens=1,2,3e,emseguida,setprev=.\%%G\%%H\%%I

Sevocêquisesseobteraletradaunidade,emvezdeusar.\,poderiausarsetprev=%%~dG\%%~G

Leituraadicional:

  • FOR - SS64
por 10.10.2018 / 18:46