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?

Foi útil?

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á.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top