Scripts em lote para diretórios ou melhor método
-
26-09-2019 - |
Pergunta
Olhando para criar um arquivo em lote simples para o meu aplicativo. Meu aplicativo precisa de alguns diretórios para estar no lugar à medida que é executado.
O primeiro método que pensei foi apenas fazer um script em lote:
@ECHO OFF
IF NOT EXIST C:\App GOTO :CREATE ELSE GOTO :DONTCREATE
:CREATE
MKDIR C:\App\Code
ECHO DIRECTORY CREATED
:DONTCREATE
ECHO IT WAS ALREADY THERE
1) Isso não funciona como eu esperaria. Ambos :CREATE
e :DONTCREATE
parece correr independentemente? Como faço para fazer um se corretamente então?
Resultado:
A subdirectory or file C:\App\Code already exists.
DIRECTORY CREATED
IT WAS ALREADY THERE
Então, ele entra em declarações verdadeiras e falsas?
2) O aplicativo é um aplicativo C# WPF. Pelo que estou tentando fazer aqui (crie alguns diretórios se ainda não existir) - devo fazer de outra maneira? Talvez no aplicativo como ele é executado?
editar: Ok, feliz em fazer apenas no código C# - mas alguém pode explicar o problema com o meu lote?
Solução
O problema é que você pensa nos alvos do Goto como pontos de partida do método. Eles são apenas rótulos no arquivo. Isso significa que depois
IF NOT EXIST C:\App GOTO :CREATE ELSE GOTO :DONTCREATE
execução pega com
:CREATE
e então continua no script logo após
:DONTCREATE
até o final do arquivo ser alcançado. Você precisa adicionar outro Goto se quiser ir para outro lugar depois: Criar acabamentos. O caso usual é dizer para Goto: EOF (uma etiqueta embutida) no final, como segue:
@ECHO OFF
IF EXIST C:\App GOTO :DONTCREATE
:CREATE
MKDIR C:\App\Code
ECHO DIRECTORY CREATED
GOTO :EOF
:DONTCREATE
ECHO IT WAS ALREADY THERE
Outras dicas
Você pode fazer todas as coisas do diretório diretamente em C#, se isso for mais fácil:
if (!Directory.Exists(@"c:\app\code")
{
Directory.CreateDirectory(@"c:\app\code");
}
else
{
Console.WriteLine("Directory already exists!");
}
Veja esta página para obter mais informações: http://msdn.microsoft.com/en-us/library/wa70yfe2%28v=vs.100%29.aspx
A resposta mais simples é provavelmente o que você já pensou - criar o diretório a partir do aplicativo conforme ele é executado.
DirectoryInfo.create () é o método que você precisará.