Como criar um arquivo de texto vazio a partir de um arquivo em lotes?

244

Alguém pode se lembrar qual foi o comando para criar um arquivo vazio no MSDOS usando o arquivo BAT?

m_pGladiator
fonte
3
Também em stackoverflow.com/questions/1702762 , "Como criar um arquivo vazio na linha de comando?".
Peter Mortensen
6
Você não está confundindo o DOS e cmd.exeestá?
usuário desconhecido
LEIA-ME: diferencia Set-Content "your_file.txt" .gitignore -Encoding utf8maiúsculas de minúsculas e força a codificação utf8! (Eu também postei isso como resposta).
Wolfpack'08

Respostas:

235
echo. 2>EmptyFile.txt
O Smurf
fonte
49
Isso ecoa uma nova linha para stdout, no entanto ... minha resposta não.
ephemient 17/10/08
7
Às vezes é relevante; Eu costumava ter um toque por aí até ter a idéia de copiar apenas o NUL (ou digite o arquivo NUL>) com o objetivo de obter arquivos de 0 byte. :-)
Joey
18
Para responder a fusão de ephemient e este, você poderia fazer: "echo> NUL 2> EmptyFile.txt." Para alcançar os mesmos resultados sem saída uma nova linha
cmptrgeekken
7
Por que está .dentroecho.
Ninh Pham
3
@Reegan Se você usasse echo 2sem o ., o console mostraria "ECHO está desativado". O uso echo. 2eficiente de silencia a saída do console exibindo apenas uma nova linha.
OneManBand
362
copiar NUL EmptyFile.txt

O DOS tem alguns arquivos especiais (dispositivos, na verdade) que existem em todos os diretórios, NULsendo o equivalente aos do UNIX /dev/null: é um arquivo mágico que está sempre vazio e joga fora qualquer coisa que você escrever nele. Aqui está uma lista de alguns outros; CONocasionalmente é útil também.

Para evitar qualquer saída, você pode usar

copiar / y NUL EmptyFile.txt> NUL

/yimpede copyde fazer uma pergunta que você não pode ver quando a saída vai NUL.

efémero
fonte
36
+1 - a pergunta indica um arquivo vazio , portanto a resposta aceita está errada.
214 Joe
9
A solução do DannySmurf, na verdade, cria um arquivo vazio - uma nova linha vai para o stdout, nada para o stderr (direcionado para o novo arquivo). Mas obrigado pelo +1 de qualquer maneira
ephemient 24/10/08
2
digite nul> EmptyFile.txt é a solução mais curta. Ainda assim, sua resposta é melhor do que a solução aceita, pois seu arquivo estará realmente vazio. +1
TPAKTOPA
3
Aviso: sim, a pergunta era sobre como criar um arquivo vazio; no entanto, geralmente você deseja "verificar se o arquivo existe". Ao usar o copy /Y NULcomando, ele pode apagar o conteúdo existente. Se você está acostumado ao touchcomando do Unix , isso pode não ser exatamente o que você espera.) O uso type NUL >> emptyfile.txté mais seguro nesse sentido.
Eckes
Não consegui encontrar nenhuma informação CON, além do que está vinculado nesta resposta. Alguém poderia compartilhar alguma leitura leve?
Sinjai
182
type NUL > EmptyFile.txt

Depois de ler os dois posts anteriores, essa mistura dos dois é o que eu criei. Parece um pouco mais limpo. Não há necessidade de se preocupar em redirecionar os "1 arquivo (s) copiado (s)". mensagem para NUL, como a postagem anterior, e parece bom ao lado da ECHO OutputLineFromLoop >> Emptyfile.txtque geralmente se segue em um arquivo em lotes.

Kevin K
fonte
13
+1 esta é a única natural que primeiro vem à mente, não os artifícios com stderr etc.
Amit Naidu
2
Você está certo. Este método evita o sinalizador / y no comando copy.
precisa saber é o seguinte
Curto e fácil. Algumas outras soluções aqui não criam um novo arquivo de zero bytes!
Christian St.
66

Técnicas que recolhi de outras respostas:

Torna um arquivo de 0 byte uma maneira muito clara e compatível com versões anteriores:

type nul >EmptyFile.txt

ideia via: anônimo , Danny Backett , possivelmente outros, eu mesmo inspirado pelo trabalho de JdeBP

Um arquivo de 0 byte de outra maneira , é compatível com versões anteriores:

REM. >EmptyFile.txt

ideia via: Johannes

Um arquivo de 0 bytes também é compatível com versões anteriores:

echo. 2>EmptyFile.txt

ideia via: TheSmurf

Um arquivo de 0 byte da maneira sistemática provavelmente disponível desde o Windows 2000:

fsutil file createnew EmptyFile.txt 0

ideia via: Emm

Um arquivo de 0 bytes substituindo arquivos somente leitura

ATTRIB -R filename.ext>NUL
(CD.>filename.ext)2>NUL

ideia via: direitos autorais

Uma única nova linha (2 bytes: 0x0D 0x0Aem notação hexadecimal , escrita alternativamente como \r\n):

echo.>AlmostEmptyFile.txt

Nota: não há espaço entre echo, .e >.

idéia via: Como você pode ecoar uma nova linha em arquivos em lotes?


editar Parece que qualquer comando inválido redirecionado para um arquivo criaria um arquivo vazio. heh, um recurso! compatibilidade: desconhecido

TheInvisibleFeature <nul >EmptyFile.txt

Um arquivo de 0 bytes: comando inválido / com um nome aleatório (compatibilidade: desconhecido):

%RANDOM%-%TIME:~6,5% <nul >EmptyFile.txt

via: ótima fonte aleatória de Hung Huynh

edit 2 Andriy M aponta a maneira provavelmente mais divertida / provocadora de conseguir isso através de um comando inválido

Um arquivo de 0 bytes: comando inválido / maneira descolada (compatibilidade: desconhecido)

*>EmptyFile.txt

ideia via: Andriy M

Um arquivo de 0 bytes é a quarta maneira :

break > file.txt

ideia via: foxidrive graças ao comentário de Double Gras !

n611x007
fonte
Na verdade type nul ...não type <nul ...é.
Andriy M
@AndriyM obrigado, você está certo, eu fiz a edição! Não percebi porque, curiosamente, funciona com o errado. o que pode significar que qualquer comando inválido redirecionado para um nome de arquivo criaria um arquivo vazio! apenas tentei com NonExistentCommand <nul >EmptyFile.txte funcionou
n611x007
uma vez que seria inseguro para contar com um nome de comando codificado esperando que ele seja "inválido", eu adicionei uma opção de nome do comando randomizado
n611x007
2
Ainda um outro: break > file.txt, adereços foxidrive
Gras Duplo
3
E a maioria dos comandos podem ser usados com >>se você precisar "deve existir, mas não deve ser truncado se existe" (como Unix touchfaz)
Eckes
25

REM. > empty.file

Johannes
fonte
Estou preso no Windows CE, e esta é a única resposta que cria e esvazia o arquivo! As outras abordagens quer adicionar uma linha em branco ou simplesmente não fazer o trabalho ...
AntonyG
O único problema com esta solução é que, se houver um arquivo chamado REM no diretório atual, e você digitar REM., o cmd responderá com "'rem.' não é reconhecido como um comando interno ou externo, programa operável ou arquivo em lote ".
DodgyCodeException
@DodgyCodeException, usando rem/em vez de rem.resolve esse problema ...
aschipfl
@aschipfl obrigado, isso é interessante. Também é interessante como essa resposta de 2010 tem comentários espaçados entre si por vários anos. Uma conversa lenta!
DodgyCodeException 20/02/19
8

Se houver a possibilidade de que o arquivo a ser gravado já exista e seja somente leitura, use o seguinte código:

ATTRIB -R filename.ext
CD .>filename.ext

Se não houver arquivo, basta:

CD .>filename.ext

(código atualizado / alterado de acordo com o comentário de DodgyCodeException)

Para suprimir quaisquer erros que possam surgir:

ATTRIB -R filename.ext>NUL
(CD .>filename.ext)2>NUL
script'n'code
fonte
1
O único problema com esta solução é que, se houver um arquivo chamado CD(sem extensão) no diretório atual e você digitar CD., o cmd responderá com "'CD.' não é reconhecido como um comando interno ou externo, programa operável ou arquivo em lote ". Se você digitar CD .(com um espaço antes do ponto), ele funcionará.
DodgyCodeException
7
fsutil file createnew file.cmd 0
Emm
fonte
O utilitário FSUTIL requer que você tenha privilégios administrativos.
DodgyCodeException
O fsutil não é um utilitário padrão no MS-DOS.
Bernhard Eriksson
7

Mais um para adicionar aos livros - curto e doce para digitar.

break>file.txt
break>"file with spaces in name.txt"
foxidrive
fonte
Acho que pularíamos as aspas #
Nam G VU
@NamGVU As aspas são usadas no nome do arquivo de destino, se você optar por usar elementos de nome de arquivo longo, como espaço ou & etc. Eles não fazem parte do conteúdo do arquivo.
foxidrive
Sim, eu concordo ^^ Permissão para atualizar o seu, conforme discutido.
Nam G VU
@NamGVU As aspas podem ser deixadas no local com ou sem um nome de arquivo longo. Eu acho que se for digitado na linha de comando com um nome de arquivo curto, você não deseja digitar desnecessariamente.
foxidrive
Sugiro remover a segunda linha desta resposta. Até agora, a IMO é a melhor resposta para a pergunta, mas a segunda linha realmente não agrega valor, a menos que a pessoa que está tentando usá-la não conheça os conceitos básicos de manipulação de espaço em branco da linha de comando.
kayleeFrye_onDeck
2

Você pode usar um TYPEcomando em vez de COPY. Tente o seguinte:

TYPE File1.txt>File2.txt

Onde File1.txtestá vazio.

Kevin K
fonte
3
Você também pode fazertype NUL>File2.txt
Danny Beckett
6
BTW, como obter File1.txt?
TomeeNS
1

Você também pode usar SETpara criar um bytearquivo nulo da seguinte maneira

set x=x > EmptyFile.txt

Ou, se você não deseja criar uma variável extra, reatribua uma variável existente como

set PROMPT=%PROMPT% > EmptyFile.txt

ou assim:

set "PROMPT=%PROMPT%" > EmptyFile.txt
PeterE
fonte
0

Existem abordagens infinitas.

Comandos que não produzem nada:

break
cls
color
goto
pushd
popd
prompt
title

Comandos estranhos:

CD.
REM.
@echo off
cmd /c
START >FILE

O printcomando desatualizado produz um arquivo em branco:

print /d:EMPTY_TEXT_FILE nul
HackingAddict1337
fonte
-2

A maneira mais fácil é:

echo. > Filename.txt

Batchman
fonte
8
Isso criará um arquivo com um caractere de espaço seguido por um caractere de retorno de carro seguido por um novo caractere de linha - e não um arquivo vazio.
Andriy M
Vale a pena olhar para a minha resposta (abaixo) porque altera a codificação.
Wolfpack'08
-3

IMPORTANTE:

Se você não definir a codificação, muitos softwares podem quebrar. O git é um exemplo muito popular.

Set-Content "your_ignore_file.txt" .gitignore -Encoding utf8 isso faz distinção entre maiúsculas e minúsculas e força a codificação utf8!

Wolfpack'08
fonte
3
Como a codificação é relevante para criar um arquivo vazio ? Um arquivo nulo byte não precisa de qualquer codificação e é complicado para marcá-lo com um BOM (0 bytes)
jeb
@jeb porque as pessoas preenchem arquivos vazios e, quando arquivos preenchidos são usados ​​como arquivos de configurações, eles criam erros quando não são UTF8. Na verdade, eu diria que as pessoas quase sempre preenchem arquivos e não os deixam em branco, e não usaria nenhum outro método para criar um arquivo em branco que pretendi alterar mais tarde, porque quase sempre quero ter certeza de que meus arquivos são UTF8. Por exemplo, o tutorial .git no github solicita ao usuário que crie um arquivo em branco que é preenchido posteriormente, e o outro método cria um arquivo com codificação estranha do Windows.
Wolfpack'08