Windows equivalente a 'táctil' (es decir, la forma de node.js de crear un index.html)

195

En una máquina con Windows me sale este error

'touch' no se reconoce como un comando interno o externo, programa operativo o archivo por lotes.

cuando sigo las instrucciones para hacer:

touch index.html app.js style.css

¿Existe un equivalente de Windows para usar 'touch'? ¿Necesito crear estos archivos a mano (y modificarlos para cambiar la marca de tiempo) para implementar este tipo de comando? Eso no parece muy ... nodo-ish ...

CuriousAboutNode
fuente
55
Una simple búsqueda en Google le muestra muchas implementaciones de Windows touch. Otra discusión aquí: superuser.com/questions/10426/… y la biblioteca Cygwin es un conjunto de herramientas común de comandos de Unix en Windows.
jfriend00
44
Posible duplicado de esta pregunta: stackoverflow.com/questions/26343974/…
Plastic Sturgeon
Posible duplicado de Crear archivo con línea de comando en Nodo
phuclv
1
Vaya directamente a la respuesta de Raghuveer si aterrizó aquí mientras usa PowerShell.
RBT

Respuestas:

279

en cmd tipo de ventana:

type nul > your_file.txt

Esto creará 0 bytes en su archivo_archivo.txt.

Otra forma de hacerlo es mediante el comando echo :

echo.> your_file.txt

eco. - creará un archivo con una línea vacía en él.

Editado el 2019-04-01:

Si necesita preservar el contenido del archivo, use >> en lugar de>

>   Creates a new file
>>  Preserves content of the file

Ejemplo

type nul >> your_file.txt

Editado el 2020-04-07

También puede usar el comando de llamada .

Llama a un programa por lotes desde otro sin detener el programa por lotes principal. El comando de llamada acepta etiquetas como el objetivo de la llamada.

Ejemplo:

call >> your_file.txt
Vlad Bezden
fuente
2
En Windows 7, la primera opción produce un cuadro de diálogo aterrador, y luego se ve access denieden la consola. ¡La segunda opción funciona bien!
Decodificado el
13
La respuesta es incorrecta, solo funciona cuando el archivo no existe. Si el archivo existe, usar >>el primero no hace nada, el segundo agrega una línea al final del archivo. La respuesta correcta es superuser.com/questions/10426/...
stenci
3
@stenci: acabo de probarlo en un archivo inexistente y funcionó bien. Creó el archivo ok. ¿Quizás te faltan derechos de administrador?
dcp
2
@stenci ese enlace de superusuario es genial. Deberías publicarlo como respuesta.
Denise Skidmore
@ DeniseSkidmore Gracias, agregué la respuesta. Está en el fondo y es más probable que la gente lea mi comentario a esta respuesta que mi respuesta, pero ahora está ahí.
stenci
67

Windows no incluye de forma nativa un touch comando.

Puede usar cualquiera de las versiones públicas disponibles o puede usar su propia versión. Guarde este código como touch.cmdy colóquelo en algún lugar de su camino

@echo off
    setlocal enableextensions disabledelayedexpansion

    (for %%a in (%*) do if exist "%%~a" (
        pushd "%%~dpa" && ( copy /b "%%~nxa"+,, & popd )
    ) else (
        type nul > "%%~fa"
    )) >nul 2>&1

Iterará sobre la lista de argumentos, y para cada elemento si existe, actualice la marca de tiempo del archivo, de lo contrario, créelo.

MC ND
fuente
este es el mejor, funciona exactamente como se esperaba ... otras soluciones aquí funcionan pero dejan textos de advertencia / error, IDK si eso es exclusivo para mí.
Shakil hace
35

Puede usar este comando: ECHO >> filename.txt

creará un archivo con la extensión dada en la carpeta actual.

ACTUALIZAR:

para un uso de archivo vacío: copie NUL filename.txt

Aaron Clark
fuente
8
Aún mejor type NUL > filename(crea un archivo de 0 bytes)
krzemian
23
Al igual que el tacto, esto no sobrescribirá el archivo si existe:type NUL >> filename
henon
3
Esta es una excelente manera de agregar "ECHO está activado". a su archivo
ripvlan
44
Esto no actualiza la marca de tiempo de los archivos existentes.
Denise Skidmore
1
Creo que Denise Skidmore está respondiendo a Henon, no a OP. (Secundo su comentario.)
Keith Russell el
28

La respuesta es incorrecta, solo funciona cuando el archivo no existe. Si el archivo existe, usar el primero no hace nada, el segundo agrega una línea al final del archivo.

La respuesta correcta es:

copy /b filename.ext +,,

Lo encontré aquí: /superuser/10426/windows-equivalent-of-the-linux-command-touch/764721#764721

stenci
fuente
1
Esta respuesta no funciona cuando el archivo no existe. (CMD produce un error.)
Keith Russell
15

Me sorprende cuántas respuestas aquí son incorrectas . Hacer eco de nada en un archivo llenará el archivo con algo así ECHO is ON, y tratar de hacer eco $nulen un archivo literalmente lo colocará $nulen el archivo. Además, para PowerShell, hacer eco $nullen un archivo en realidad no generará un archivo de 0kb, sino algo codificado como UCS-2 LE BOM, que puede ser complicado si necesita asegurarse de que sus archivos no tengan una marca de orden de bytes.

Después de probar todas las respuestas aquí y hacer referencia a algunas similares, puedo garantizar que funcionarán por consola. Simplemente cambie FileName.FileExtensiona la ruta completa o relativa del archivo que desea touch; Gracias a Keith Russell por la COPY NUL FILE.EXTactualización:

CMD con actualizaciones de fecha y hora

copy NUL FileName.FileExtension

Esto creará un nuevo archivo llamado lo que haya colocado en lugar de FileName.FileExtensionun tamaño de 0 bytes. Si el archivo ya existe, básicamente se copiará en el lugar para actualizar la marca de tiempo. Diría que esto es más una solución alternativa que la funcionalidad 1: 1, touchpero no conozco ninguna herramienta incorporada para CMD que pueda lograr actualizar la marca de tiempo de un archivo sin cambiar ningún otro contenido.

CMD sin actualizaciones de fecha y hora

if not exist FileName.FileExtension copy NUL FileName.FileExtension

Powershell con actualizaciones de fecha y hora

if (!(Test-Path FileName.FileExtension -PathType Leaf)) {New-Item FileName.FileExtension -Type file} else {(ls FileName.FileExtension ).LastWriteTime = Get-Date}

Sí, funcionará en la consola como una línea; no es necesario colocarlo en un archivo de script de PowerShell.

PowerShell sin actualizaciones de fecha y hora

if (!(Test-Path FileName.FileExtension -PathType Leaf)) {New-Item FileName.FileExtension -Type file}

kayleeFrye_onDeck
fuente
1
¿Qué pasa con la situación en la que existe el archivo y desea actualizar su marca de tiempo de modificación a la hora actual? No veo cómo estos ejemplos logran eso.
RoG
2
Gran observación, RoG! He actualizado la respuesta para abordar esto :)
kayleeFrye_onDeck
Esta es la mejor respuesta. Sin embargo, todavía lo mejoraría reemplazando fsutil file CreateNew FileName.FileExtension 0por copy NUL Filename.FileExtension, ya que este último es más corto y hace lo mismo.
Keith Russell el
@KeithRussell IIRC hubo una razón específica Yo no utilizar copymás fsutil, pero ha sido un tiempo ... Estoy bastante seguro de que es cómo incluso aprendieron sobre fsutiljaja! Trataré de averiguar por qué ...
kayleeFrye_onDeck
1
Incluso si se comportan igual, supongo que es prematuro para mí decir que uno es mejor, sin pruebas de velocidad.
Keith Russell
14

Use el siguiente comando en su línea de comando:

fsutil file createnew filename  requiredSize

La información de parámetros como sigue:

fsutil: utilidad del sistema de archivos (el ejecutable que está ejecutando)

archivo: desencadena una acción de archivo

createnew: la acción a realizar (crear un nuevo archivo)

nombre de archivo: sería literalmente el nombre del archivo

requiredSize: asignaría un tamaño de archivo en bytes en el archivo creado

Ofer Haber
fuente
2
Se requiere alguna explicación para que esto se considere una respuesta decente. No está claro qué significan estas cinco palabras.
jfriend00
1
funcionó para mí ... lo requerido por SizeSize es extraño ... sin embargo, el comando simplemente llena su nuevo archivo con miles de NULLs ... raro ... así que solo use 0 ... genera un error si omite el requiredSize .. .
dsdsdsdsd
1
esta comisión necesita privilegios de administrador :(
ADJ
1
touch también actualiza la marca de tiempo en los archivos existentes, no solo crea nuevos archivos.
Denise Skidmore
1
el tacto es una forma rápida de hacerlo, supongo que lo más cercano a él sería eco o tipo, aunque esta es una herramienta muy útil para la creación de secuencias de comandos y muy utilizada en WS16, ¡aprobado! docs.microsoft.com/en-us/windows-server/administration/…
Alan
10

En Windows Power Shell, puede usar el siguiente comando:

New-Item <filename.extension>

o

New-Item <filename.extension> -type file

Nota: New-Item se puede reemplazar con su alias ni

Raghuveer
fuente
1
Esta es la respuesta real en el mundo actual de Windows, donde PowerShell es el programa de comando predeterminado.
RBT
No estoy seguro de a qué Windows te refieres, acabo de instalar un Windows 10 nuevo y Powershell definitivamente no es el shell predeterminado. 'New-Item' is not recognized as an internal or external command
user5359531
8

Puede replicar la funcionalidad del tacto con el siguiente comando:

$>>filename

Lo que esto hace es intentar ejecutar un programa llamado $, pero si $no existe (o no es un ejecutable que produce salida), entonces no produce ninguna salida. Es esencialmente un truco en la funcionalidad, sin embargo, recibirá el siguiente mensaje de error:

'$' no se reconoce como un comando interno o externo, programa operativo o archivo por lotes.

Si no desea el mensaje de error, puede hacer una de dos cosas:

type nul >> filename

O:

$>>filename 2>nul

El typecomando intenta mostrar el contenido de nul, que no hace nada pero devuelve un EOF (final del archivo) cuando se lee.

2>nulenvía salida de error (salida 2) a nul (que ignora todas las entradas cuando se escribe en). Obviamente, el segundo comando (con 2>nul) se typevuelve redundante debido a que es más rápido de escribir. Pero al menos ahora tiene la opción y el conocimiento.

Keldon Alleyne
fuente
Esto es genial, pero siempre se establece %ERRORLEVEL%en un valor distinto de cero. Puede solucionar ese problema agregando un noop || cd., pero esto siempre establece el error en 0, que podría no ser lo que desea si falla el "toque".
Keith Russell el
5

No es necesario ningún comando, ni typetampoco echo, para emular el comando 'táctil' de Unix / Mac OS X en un terminal de Windows Powershell. Simplemente use la siguiente taquigrafía:

$null > filename

Esto creará un archivo vacío llamado 'nombre de archivo' en su ubicación actual. Utilice cualquier extensión de nombre de archivo que pueda necesitar, por ejemplo, '.txt'.

Fuente: /superuser/502374/equivalent-of-linux-touch-to-create-an-empty-file-with-powershell (ver comentarios)

Oliver Schafeld
fuente
1
parece que te perdisteecho
sabithpocker
@sabithpocker en cmd de Windows, $ null no existe, y dado que no existe, no produce ningún resultado. Usted $null > filenameenvía esa salida de vacío a nombre de fichero (si usted me entiende).
Keldon Alleyne
1
@sabithpocker En Windows Powershell funciona sin echoEn el terminal de línea de comando estándar (cmd) que necesita echo. Perdón por la confusion.
Oliver Schafeld
@OliverSchafeld y Keldon Gracias por la explicación.
sabithpocker
1
Esto agrega una lista de materiales al archivo.
kayleeFrye_onDeck
3

También puede usar copy con [filename] en una ventana de comandos de Windows (cmd.exe):

C:\copy con yourfile.txt [enter]
C:\CTRL + Z [enter] //hold CTRL key & press "Z" then press Enter key.
^Z
    1 Files Copied.

Esto creará un archivo llamado yourfile.txt en el directorio local.

delliottg
fuente
3

como se mencionó

echo >> index.html

puede ser cualquier archivo, con cualquier extensión, entonces

notepad index.html

esto abrirá su archivo en el editor de bloc de notas

Boris
fuente
3

Yo uso cmder(un emulador de línea de comando)

Le permite ejecutar todos los comandos de Linux dentro de una máquina con Windows.

Se puede descargar desde https://cmder.net/

Me gusta mucho

usuario1880531
fuente
1
¿Qué pasa con la advertencia de "Editor desconocido" cuando intento abrir Cmder en win10? Gorrón.
Chris22
2

Suponiendo que el archivo existe y solo necesita actualizar la marca de tiempo.

type test.c > test.c.bkp && type test.c.bkp > test.c && del test.c.bkp
Anoop Kumar Narayanan
fuente
2

Desde la Terminal de Visual Code Studio en Windows 10, esto es lo que me funcionó para crear un nuevo archivo:

type > hello.js
echo > orange.js
ni > peach.js
eimn
fuente
1

Si tiene Cygwin instalado en su PC, simplemente puede usar el ejecutable suministrado para tocar (también a través del símbolo del sistema de Windows):

C:\cygwin64\bin\touch.exe <file_path>
Uri Ziv
fuente
-1

Fácil, ejemplo con archivo txt

echo $null >> filename.txt
Thiago Maciel
fuente
Agrega $nullal archivo.
Tomáš Zato - Restablece a Mónica el
-1

Sí, puedes usar Node for Touch, solo lo uso y funciona bien en Windows Cmd o gitbash

ingrese la descripción de la imagen aquí

Asad Iftikhar
fuente
No rechacé esto, pero explicaré por qué probablemente lo fue. Esta pregunta fue etiquetada [cmd], y eso implica que el OP quiere una respuesta que funcione de manera inmediata para CMD, lo que significa que no hay utilidades de línea de comandos que no estén empaquetadas con una instalación predeterminada de Windows. Eso excluirá prácticamente todos los lenguajes de secuencias de comandos, incluso los lenguajes de secuencias de comandos integrados de Windows como CScript, WScript y PowerShell. El punto no es que funcione en el entorno CMD, sino que es posible para cualquier persona con acceso a CMD, sin incluir problemas de permisos.
kayleeFrye_onDeck