¿Cómo crear un archivo de texto vacío a partir de un archivo por lotes?

244

¿Alguien puede recordar cuál fue el comando para crear un archivo vacío en MSDOS usando el archivo BAT?

m_pGladiator
fuente
3
También en stackoverflow.com/questions/1702762 , "¿Cómo crear un archivo vacío en la línea de comando?".
Peter Mortensen el
66
No estás confundiendo DOS y cmd.exe, ¿verdad?
usuario desconocido
Set-Content "your_file.txt" .gitignore -Encoding utf8LÉAME : ¡ esto distingue entre mayúsculas y minúsculas y fuerza la codificación utf8! (También publiqué esto como respuesta).
Wolfpack'08

Respuestas:

235
echo. 2>EmptyFile.txt
El Pitufo
fuente
49
Sin embargo, esto hace eco de una nueva línea a stdout ... mi respuesta no.
efímero
77
A veces es relevante; Solía ​​tener contacto por ahí hasta que tuve la idea de copiar NUL (o escribir NUL> archivo) con el fin de obtener archivos de 0 bytes. :-)
Joey
18
Para combinar la respuesta de ephemient y esta, podría hacer: "echo.> NUL 2> EmptyFile.txt" para lograr los mismos resultados sin generar una nueva línea
cmptrgeekken
77
Por qué está .enecho.
Ninh Pham
3
@Reegan Si lo usara echo 2sin ., la consola diría "ECHO está apagado". El uso echo. 2efectivamente silencia la salida de la consola al mostrar solo una nueva línea.
OneManBand
362
copiar NUL EmptyFile.txt

DOS tiene algunos archivos especiales (dispositivos, en realidad) que existen en cada directorio, NULsiendo el equivalente de UNIX /dev/null: es un archivo mágico que siempre está vacío y tira todo lo que le escribes. Aquí hay una lista de algunos otros; CONocasionalmente es útil también.

Para evitar tener ningún resultado, puede usar

copy / y NUL EmptyFile.txt> NUL

/yevita copyque haga una pregunta que no puede ver cuando se envía la salida NUL.

efímero
fuente
36
+1: la pregunta indica un archivo vacío , por lo que la respuesta aceptada es incorrecta.
Joe
99
La solución de DannySmurf en realidad crea un archivo vacío: una nueva línea va a stdout, nada va a stderr (dirigido al nuevo archivo). Pero gracias por el +1 de todos modos
efímero
2
escriba nul> EmptyFile.txt es la solución más corta. Aún así, su respuesta es mejor que la solución aceptada, porque su archivo estará realmente vacío. +1
TPAKTOPA
3
Advertencia: sí, la pregunta era cómo crear un archivo vacío, sin embargo, por lo general, desea "asegurarse de que el archivo existe". Al usar el copy /Y NULcomando, puede borrar el contenido existente. Si está acostumbrado al touchcomando de Unix , esto podría no ser lo que espera.) El uso type NUL >> emptyfile.txtes más seguro a este respecto.
Eckes
No pude encontrar ninguna información CON, aparte de la vinculada en esta respuesta. ¿Podría alguien compartir alguna lectura ligera?
Sinjai
182
type NUL > EmptyFile.txt

Después de leer las dos publicaciones anteriores, esta mezcla de las dos es lo que se me ocurrió. Parece un poco más limpio. No hay necesidad de preocuparse por redirigir los "1 archivos copiados". mensaje para NUL, como lo hace la publicación anterior, y se ve bien al lado del ECHO OutputLineFromLoop >> Emptyfile.txtque generalmente seguirá en un archivo por lotes.

Kevin K
fuente
13
1 esta es la natural que primero viene a la mente, no los artificios con stderr etc.
Amit Naidu
2
Estás en lo correcto. Este método evita el indicador / y en el comando copiar.
djangofan
Corto y fácil. ¡Algunas otras soluciones aquí no crean un nuevo archivo de cero bytes!
Christian St.
66

Técnicas que obtuve de otras respuestas:

Hace que un archivo de 0 bytes sea muy claro y compatible con versiones anteriores:

type nul >EmptyFile.txt

idea vía: anónimo , Danny Backett , posiblemente otros, inspirado por el trabajo de JdeBP

Un archivo de 0 bytes de otra manera , es compatible con versiones anteriores:

REM. >EmptyFile.txt

idea vía: Johannes

Un archivo de 0 bytes de tercera vía también compatible con versiones anteriores:

echo. 2>EmptyFile.txt

idea a través de: TheSmurf

Un archivo de 0 bytes de la forma sistemática probablemente disponible desde Windows 2000:

fsutil file createnew EmptyFile.txt 0

idea a través de: Emm

Un archivo de 0 bytes que sobrescribe archivos de solo lectura

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

idea a través de: copyitright

Una nueva línea nueva (2 bytes: 0x0D 0x0Aen notación hexadecimal , alternativamente escrita como \r\n):

echo.>AlmostEmptyFile.txt

Nota: no hay espacio entre echo, .y >.

idea vía: ¿Cómo puedes repetir una nueva línea en archivos por lotes?


editar Parece que cualquier comando no válido redirigido a un archivo crearía un archivo vacío. je, una característica! compatibilidad: desconocido

TheInvisibleFeature <nul >EmptyFile.txt

Un archivo de 0 bytes: comando no válido / con un nombre aleatorio (compatibilidad: desconocido):

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

vía: gran fuente de azar por Hung Huynh

editar 2 Andriy M señala la forma probablemente más divertida / provocadora de lograr esto a través de un comando no válido

Un archivo de 0 bytes: comando no válido / the funky way (compatibilidad: desconocida)

*>EmptyFile.txt

idea a través de: Andriy M

Un archivo de 0 bytes que viene por cuarta vez :

break > file.txt

idea vía: foxidrive gracias al comentario de Double Gras !

n611x007
fuente
Es type nul ..., no type <nul ..., en realidad.
Andriy M
@AndriyM gracias, tienes razón, hice la edición. No me di cuenta porque, curiosamente, funciona con el incorrecto. ¡lo que puede significar que cualquier comando no válido redirigido a un nombre de archivo crearía un archivo vacío! acabo de probar NonExistentCommand <nul >EmptyFile.txty funcionó
n611x007
dado que sería inseguro confiar en un nombre de comando codificado que espera que sea "inválido", agregué una opción de nombre de comando aleatorio
n611x007
2
Otro más: break > file.txtprops foxidrive
Gras Double
3
Y la mayoría de los comandos se pueden usar >>si necesita "debe existir pero no debe truncarse si existe" (como touchhace Unix )
eckes
25

MOVIMIENTO RÁPIDO DEL OJO. > empty.file

Johannes
fuente
Estoy atascado en Windows CE, y esta es la única respuesta que crea un archivo vacío. Los otros enfoques o bien agregar una línea en blanco o simplemente no funcionan ...
AntonyG
El único problema con esta solución es que si hay un archivo llamado REM en el directorio actual y escribe REM., cmd responderá con "'rem' '. no se reconoce como un comando interno o externo, programa operativo o archivo por lotes ".
DodgyCodeException
@DodgyCodeException, usar en rem/lugar de rem.resolver ese problema ...
aschipfl
@aschipfl gracias, eso es interesante. También es interesante cómo esta respuesta de 2010 tiene comentarios separados entre sí por varios años. ¡Una conversación lenta!
DodgyCodeException
8

Si existe la posibilidad de que el archivo a escribir ya exista y sea de solo lectura, use el siguiente código:

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

Si no existe ningún archivo, simplemente haga:

CD .>filename.ext

(código actualizado / modificado de acuerdo con el comentario de DodgyCodeException)

Para suprimir cualquier error que pueda surgir:

ATTRIB -R filename.ext>NUL
(CD .>filename.ext)2>NUL
script'n'code
fuente
1
El único problema con esta solución es que si hay un archivo llamado CD(sin extensión) en el directorio actual y escribe CD., cmd responderá con "'CD'. no se reconoce como un comando interno o externo, programa operativo o archivo por lotes ". Si en su lugar escribe CD .(con un espacio antes del punto) funcionará.
DodgyCodeException
7
fsutil file createnew file.cmd 0
Emm
fuente
La utilidad FSUTIL requiere que tenga privilegios administrativos.
DodgyCodeException
fsutil no es una utilidad estándar en MS-DOS.
Bernhard Eriksson el
7

Uno más para agregar a los libros: corto y dulce para escribir.

break>file.txt
break>"file with spaces in name.txt"
FoxDrive
fuente
Supongo que nos saltaríamos las citas
Nam G VU
@NamGVU Las comillas se usan en el nombre de archivo de destino, si elige usar elementos largos de nombre de archivo, como espacio, etc. No forman parte del contenido del archivo.
foxidrive
Sí, estoy de acuerdo ^^ Permiso para actualizar el tuyo como se discutió.
Nam G VU
@NamGVU Las comillas pueden dejarse en su lugar con o sin un nombre de archivo largo. Supongo que si se escribe desde la línea de comando con un nombre de archivo corto, entonces no querrá escribir innecesariamente.
foxidrive
Sugiero eliminar la segunda línea de esta respuesta. OMI, esta es la mejor respuesta a la pregunta hasta ahora, pero la segunda línea no agrega realmente valor a menos que la persona que intenta usarla no conozca los conceptos básicos del manejo de espacios en blanco para la línea de comandos.
kayleeFrye_onDeck
2

Puede usar un TYPEcomando en lugar de COPY. Prueba esto:

TYPE File1.txt>File2.txt

Donde File1.txtesta vacio

Kevin K
fuente
3
También puedes hacerlotype NUL>File2.txt
Danny Beckett
66
Por cierto, ¿cómo obtener File1.txt?
TomeeNS
1

También puede usar SETpara crear un bytearchivo nulo de la siguiente manera

set x=x > EmptyFile.txt

O si no desea crear una variable adicional, reasigne una variable existente como

set PROMPT=%PROMPT% > EmptyFile.txt

o así:

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

Hay infinitos enfoques.

Comandos que no generan nada:

break
cls
color
goto
pushd
popd
prompt
title

Comandos raros:

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

El printcomando desactualizado produce un archivo en blanco:

print /d:EMPTY_TEXT_FILE nul
HackingAddict1337
fuente
-2

La forma más fácil es:

echo. > Filename.txt

Batchman
fuente
8
Esto creará un archivo con un carácter de espacio seguido de un carácter de retorno de carro seguido de un nuevo carácter de línea, no un archivo vacío.
Andriy M
Vale la pena mirar mi respuesta (a continuación) porque cambia la codificación.
Wolfpack'08
-3

IMPORTANTE:

Si no configura la codificación, muchos softwares pueden romperse. git es un ejemplo muy popular.

Set-Content "your_ignore_file.txt" .gitignore -Encoding utf8 esto distingue entre mayúsculas y minúsculas y fuerza la codificación utf8.

Wolfpack'08
fuente
3
¿Cómo es relevante la codificación para crear un archivo vacío ? Un archivo de byte nulo no necesita codificación y es difícil marcarlo con una lista de materiales (0 bytes)
jeb
@jeb porque las personas llenan archivos vacíos y cuando los archivos rellenos se usan como archivos de configuración, crean errores cuando no son UTF8. De hecho, diría que la gente casi siempre llena los archivos y no los deja en blanco, y no usaría ningún otro método para crear un archivo en blanco que luego pretendía alterar porque casi siempre quiero estar seguro de que mis archivos son UTF8. Por ejemplo, el tutorial .git en github le pide al usuario que cree un archivo en blanco que luego se rellena, y el otro método crea un archivo con codificación extraña de Windows.
Wolfpack'08