¿Cómo crear un archivo vacío en la línea de comando en Windows?

494

¿Cómo crear un archivo vacío en la línea de comandos de DOS / Windows?

Lo intenté:

copy nul > file.txt

pero siempre muestra que se copió un archivo.

¿Hay algún otro método en el cmd estándar?

Debe ser un método que no requiera el comando táctil de Cygwin o cualquier otro comando no estándar. El comando debe ejecutarse desde un script para que no se puedan usar las pulsaciones de teclas.

Grendler
fuente
Acabo de encontrar un verdadero comando por lotes que resulta en un archivo vacío (0 bytes): he actualizado mi respuesta.
VonC el
3
Duplicado: stackoverflow.com/questions/210201 , "¿Cómo crear un archivo de texto vacío a partir de un archivo por lotes?". (Pero, en mi humilde opinión, las respuestas son mejores aquí.)
Peter Mortensen
Sí, el comando copy nul> file.txt se crea con el texto "1 archivo (s) copiado". El archivo vacío no se crea.
Ripon Al Wasim
55
Esto para mí solo prueba que MS-DOS es basura si no puede crear un archivo vacío simple con un comando.
Kolob Canyon
2
@KolobCanyon: puedes, por supuesto, según las respuestas ya publicadas. ¿Pero realmente cree que la capacidad de crear rápidamente un archivo vacío debería ser una prioridad para un sistema operativo dirigido a usuarios finales y que necesita ejecutarse en 16K de RAM? Después de todo, no es algo particularmente útil, excepto en algunos casos excepcionales.
Harry Johnston

Respuestas:

571

Sin redirección, Luc Vu o Erik Konstantopoulos apuntan a cabo a:

copy NUL EMptyFile.txt
copy /b NUL EmptyFile.txt

" ¿Cómo crear un archivo de texto vacío a partir de un archivo por lotes? " (2008) también apunta a:

type NUL > EmptyFile.txt
# also
echo. 2>EmptyFile.txt
copy nul file.txt > nul # also in qid's answer below
REM. > empty.file
fsutil file createnew file.cmd 0 # to create a file on a mapped drive

Nomad menciona una original :

C:\Users\VonC\prog\tests>aaaa > empty_file
'aaaa' is not recognized as an internal or external command, operable program or batch file.

C:\Users\VonC\prog\tests>dir

 Folder C:\Users\VonC\prog\tests

27/11/2013  10:40    <REP>          .
27/11/2013  10:40    <REP>          ..
27/11/2013  10:40                 0 empty_file

En el mismo espíritu, Samuel sugiere en los comentarios :

el más corto que uso es básicamente el de Nomad:

.>out.txt

Sí da un error:

'.' is not recognized as an internal or external command

Pero este error está en stderr. Y >solo redirige stdout, donde no se ha producido nada .
De ahí la creación de un archivo vacío . El mensaje de error puede ignorarse aquí.


(Respuesta original, noviembre de 2009)

echo.>filename

echo ""realmente pondría "" en el archivo! Y echosin el '.' pondría " Command ECHO activated" en el archivo ...)

Nota: el archivo resultante no está vacío, pero incluye una secuencia de línea de retorno: 2 bytes.


Esta discusión apunta a una verdadera solución por lotes para un archivo vacío real :

 <nul (set/p z=) >filename

 dir filename
 11/09/2009  19:45                 0 filename
 1 file(s)                         0 bytes

El " <nul" canaliza una nulrespuesta al set/pcomando, lo que hará que la variable utilizada permanezca sin cambios. Como es habitual con set/p, la cadena a la derecha del signo igual se muestra como un mensaje sin CRLF.

Como aquí la "cadena a la derecha del signo igual" está vacía ... el resultado es un archivo vacío.


La diferencia con cd. > filename(que se menciona en la respuesta de Patrick Cuff y también produce un archivo de 0 bytes de longitud) es que este "bit de redireccionamiento" (el <nul...truco) se puede utilizar para repetir líneas sin ningún CR :

<nul (set/p z=hello) >out.txt
<nul (set/p z= world!) >>out.txt
dir out.txt

El dircomando debe indicar el tamaño del archivo como 11 bytes: " helloworld!".

VonC
fuente
2
realmente querría echo.>filenameporque incluirá tanto el espacio como el carácter de nueva línea.
Agent_9191
1
El uso del remcomando evita crear un archivo con una línea vacía.
Greg Hewgill el
@ Agent_9191: cierto, he actualizado mi respuesta. @Greg: no estoy seguro de lo que quieres decir: rem>filenameproduce el mismo resultado (2 bytes)
VonC
3
Noufal Ibrahim: no dejes que esto te engañe; solo vea la siguiente respuesta que tiene una solución mucho más fácil e igualmente funcional. Lo que se hace aquí es parcialmente incorrecto en el primer caso (no está vacío pero contiene un salto de línea) y es demasiado complicado en el segundo.
Joey
1
@barlop Sí: ese es el punto: activa algún mensaje de error en stderr, pero nada (cadena vacía) en stdout. Y >redirigir stdout solo a out.txt. De ahí la creación de un archivo vacío. Puede ignorar el mensaje de error en este contexto.
VonC
270

Prueba esto:

type NUL > 1.txt

Esto definitivamente creará un archivo vacío.

Justin
fuente
Esto agrega "NUL is ./NUL" al archivo
dshgna
106

Aquí hay otra forma:

cd. > filename
Patrick Cuff
fuente
11
cd. > filename¡No es trabajo para mí en lugar de cd > filename trabajos!
NaveenDA
3
"cd.> filename" crea un archivo vacío; de lo contrario, tendrá la ruta de archivo impresa en el archivo recién creado con el comando "cd> filename".
niketan
66
Use esto: lo que cd . > filename.extensionsignifica que necesita un espacio entre cdy.
AIon
77

Si realmente quieres un archivo totalmente vacío, sin ningún resultado para stdout, puedes hacer un poco de trampa:

copy nul file.txt > nul

Simplemente redirija stdout a nul, y la salida de la copia desaparecerá.

qid
fuente
1
Falla si existe el archivo.txt.
Grendler
66
Fallar si el archivo existe es un buen comportamiento ya que entiendo la pregunta.
wallyk
32
+1. Es sorprendente cómo la respuesta aceptada es algo medio equivocado y medio intrincado, mientras que la respuesta obviamente correcta casi no recibe crédito. Para agregar a esto: type nul>filesería otra forma.
Joey
@Joey el aceptado tiene un montón de soluciones que funcionan para crear un archivo de 0 bytes vacío.
barlop
2
@barlop: Como referencia, esta fue la respuesta aceptada en el momento en que se escribió el comentario. No recibo una notificación cada vez que cambia una respuesta, hago referencia en un comentario.
Joey
48

Abrir documento :

type file.txt

Archivo nuevo :

Way 1 : type nul > file.txt
Way 2 : echo This is a sample text file > sample.txt
Way 3 : notepad myfile.txt <press enter>

Contenido editado:

notepad file.txt

Copiar

copy file1.txt file1Copy.txt

Rebautizar

rename file1.txt file1_rename.txt

Borrar archivo :

del file.txt
iCrazybest
fuente
Buena descripción de los comandos cmd
KargWare
32

Al leer los comentarios en mi publicación, debo admitir que no leí bien la pregunta.

En la línea de comandos de Windows, una forma sería usar fsutil :

fsutil file createnew <filename> <size>

Un ejemplo:

fsutil file createnew myEmptyFile.txt 0

A continuación se muestra la línea de comandos * nix.

touch filename

Este comando cambia la fecha de modificación de un archivo o lo crea si no se encuentra el archivo.

nash
fuente
Desafortunadamente, la pregunta específicamente dice: "Sin el comando táctil de Cygwin".
qid
3
Existen implementaciones que no son Cygwin del comando táctil: unxutils.sourceforge.net es bueno.
Greg Hewgill el
En * nix, personalmente soy parcial a un simple > filename, que también se puede utilizar para truncar un archivo existente.
Frank Farmer el
fsutilNecesita privilegios administrativos. Eso es mucho pedir simplemente creando un archivo vacío ...
Joey
@Joey ¿No son todos estos comandos demasiado para crear un archivo vacío? Incluso el siguiente con 120 puntos es mucho cuando estás acostumbrado a tocar.
Johnny
29
echo "" > filename

Creo que esto funciona en Windows / DOS, pero mi última experiencia práctica con ambos es hace bastante tiempo. Sé a ciencia cierta que funciona básicamente en cualquier sistema operativo compatible con POSIX .

Kris
fuente
2
Aparentemente, la respuesta de VonC es mejor que la mía, así que vota en su lugar.
Kris el
3
Desafortunadamente: echo "" muestra comillas dobles y se escriben en el archivo cuando la secuencia se redirige a él. Lo mismo sucede con just: echo> filename porque escribe que ECHO también está desactivado / activado en el archivo.
Grendler el
tal vez podrías poner "@echo off" en la línea antes de crear el archivo para evitar eso.
Kris el
27
call>file.txt

Esta es la forma más limpia que conozco.

nephi12
fuente
¿Qué tiene esto de "limpio"?
GreenAsJade
44
no genera nada en el archivo y es fácil de recordar y usar.
nephi12
Esta fue la solución más simple que funciona y más fácil de recordar.
nhershy
12
cd > filename.cfg 

funcionó al crear un archivo en C: / Archivos de programa donde no tiene acceso para crear archivos directamente.

Subhashi
fuente
11

Puedes escribir tu propio toque.

//touch.cpp
#include <fstream>
#include <iostream>

int main(int argc, char ** argv;)
{
  if(argc !=2)
  {
    std::cerr << "Must supply a filename as argument" << endl;
    return 1;
  }
  std::ofstream foo(argv[1]);
  foo.close();
  return 0;
}
Paul Nathan
fuente
6

copy con SomeFile.txt Enter

Ctrl-Z Enter

DRapp
fuente
Precisé la pregunta de que el comando se ejecutará desde el script, por lo que desafortunadamente cualquier interacción con el teclado no funciona. Gracias de todos modos.
Grendler el
6

Otro método más que crea un archivo de cero bytes:

break > "file.txt"
Foxidrive
fuente
6

para que pueda crear un archivo vacío con

'' > newfile.txt

navegue al directorio y escriba el comando anterior en la ventana de PowerShell.

Tenga en cuenta que esto no funcionará en el símbolo del sistema de Windows.

Aswin 1054
fuente
5

Pruebe esto: abc > myFile.txt Primero, creará un archivo con el nombre myFile.txten el directorio de trabajo actual (en el símbolo del sistema). Luego ejecutará el comando abcque no es un comando válido. De esta manera, ha obtenido un nuevo archivo vacío con el nombre myFile.txt.

Nómada
fuente
2
Esto podría estar muy mal si abcestuviera en la ruta y fuera una función conveniente para formatear todas las unidades, excepto el directorio de instalación.
Sangrado dedos
5

type nul>filename creará un nuevo archivo vacío.

Lo siento, llego tarde.

ACTUALIZACIÓN : también copy nul filenamefunciona sin redirigir (solución más obvia).

EKons
fuente
5

Usar copy > your_file_name.extensionen el símbolo del sistema como

P:\excecise> copy > Sample.txt
Raj Kumar Mishra
fuente
4

También puedes usar:

echo. 2>foo

La salida de depuración para echo.casi definitivamente estará vacía.

Craig
fuente
4

Leo muchos hilos pero no es el camino más corto.

Por favor use el comando:

>copy /b NUL empty_file.txt

suhao399
fuente
4

Puedes usar el comando anterior

copy con file_name.ext

no escriba nada, solo presione F6 para guardarlo, sin embargo, imprimirá "Archivo copiado", pero cuando abra el archivo, estará vacío

Amado Saladino
fuente
4

Para crear cualquier tipo de archivo puede usar el siguiente código

escriba nul> (nombre_archivo). (tipo_archivo)

P.ej. Si desea crear un archivo de texto, entonces

escriba nul> demo.txt

Si quieres crear un archivo javascript entonces

escriba nul> demo.js

Darshan Jain
fuente
3

Esto funcionó para mí

echo > file.extension

Aquí hay otra forma que encontré hoy, obtuve ideas de otras respuestas pero funcionó

sometext > filename.extension

P.ej.

xyz > emptyfile.txt  //this would create an empty zero byte text file
abc > filename.mp4   //this would create an zero byte MP4 video media file

Esto mostraría un mensaje de error en el símbolo del sistema que,

xyz no es como un comando interno o externo, programa operativo o archivo por lotes.

Pero lo extraño que encontré fue que el archivo se está creando en el directorio incluso si el comando no es un comando estándar de Windows.

Suerte
fuente
1
Hay más de un "controlador" en el que las aplicaciones de consola pueden leer / escribir. Los estándares son: (0) STDIN, (1) STDOUT y (2) STDERR. Creo que la razón por la que su truco funciona aquí es porque toda la salida va al controlador de errores, pero solo está dirigiendo STDOUT al archivo. Intente hacer: "xyz> emptyfile.txt 2> & 1" para redirigir STDERR a lo que sea que esté utilizando STDOUT, que resulta estar redirigiendo a "emptyfile.txt". Debería ver el mensaje de error dentro de ese archivo ahora.
Brent Rittenhouse
3

Prueba esto:

echo $null >> filename 

Ver: superUser

shireef khatab
fuente
3

En Windows intenté hacer esto

echo off > fff1.txt

y creó un archivo llamado fff1.txt con un tamaño de archivo de 0kb

No encontré ningún comando aparte de esto que pudiera crear un archivo vacío.

Nota: debe estar en el directorio en el que desea crear el archivo.

Omkar Agrawal
fuente
no olvide hacer eco después de crear el archivo si lo necesita.
QMaster
Este comando congela el cmd después de hacer clic en ENTER.
Kavin Raju S
No estoy seguro de por qué lo hace, pero supongo que debería "hacer eco" después de ingresar el comando anterior.
Omkar Agrawal
3

Otra forma más:

copy nul 2>empty_file.txt
GadBro
fuente
2

Solo lo he intentado en windows

copy con file.txt

luego presione la Entertecla y luego presioneCtrl+Z Enter

Y ha funcionado para mí.

Para Ubuntu, generalmente estoy creando un archivo usando el comando VI

vi file.txt

Se abrirá el archivo, luego presione la ESCtecla y luego escriba : wp ​​y luego presione la entertecla. Creará un nuevo archivo con datos vacíos.

ARJUN KP
fuente
2
  • crear un archivo bat con contenido echo '' > %1 . (nombre el archivo como touch.bat)
  • agregue la carpeta a la variable PATH.
  • puedes usar el toque para crear archivos. (Ej: touch temp.txtcrea un archivo temp.txt)

Consulte este artículo para obtener más información.

Pranay Kumar
fuente
1

Hoy he descubierto uno nuevo :)

Esto cambiará el título de la ventana de la línea de comando, pero también creará un archivo vacío.

title > file.txt
ninix
fuente
1

Ejecute CMD en modo admistrador y escriba esto:

NUL > file_name.extention

o escribes esto

echo .> file_name.extention
Lekens
fuente
1

Aquí hay otra manera:

rem/ > file.ext

La barra oblicua /es obligatoria; sin ella, la parte de redirección fue comentada por rem.

aschipfl
fuente
0

Primero cree su archivo para que exista:

echo . > myfile.txt

Luego sobrescriba el archivo creado con una versión vacía con el copycomando:

copy /y nul myfile.txt
Dowopfan
fuente