Equivalente di Windows di "touch" (ovvero il modo node.js per creare un index.html)


196

Su una macchina Windows ottengo questo errore

'touch' non è riconosciuto come comando interno o esterno, programma eseguibile o file batch.

quando seguo le istruzioni per fare:

touch index.html app.js style.css

Esiste un equivalente di Windows nell'uso di "touch"? Devo creare questi file a mano (e modificarli per cambiare il timestamp) al fine di implementare questo tipo di comando? Non sembra molto ... nodo-ish ...


5
Una semplice ricerca su Google mostra molte implementazioni di Windows di touch. Altre discussioni qui: superuser.com/questions/10426/… e la libreria Cygwin è un set di strumenti comune di comandi Unix su Windows.
jfriend00,

4
Possibile duplicato di questa domanda: stackoverflow.com/questions/26343974/…
Plastic Sturgeon


1
Si prega di saltare a risposta di Raghuveer direttamente se hai atterrato qui durante l'utilizzo di PowerShell.
RBT

Risposte:


279

nel tipo di finestra cmd:

type nul > your_file.txt

Ciò creerà 0 byte nel file your_file.txt.

Un altro modo di farlo è usando il comando echo :

echo.> your_file.txt

eco. - creerà un file con una riga vuota al suo interno.

Modificato il 01-04-2019:

Se è necessario conservare il contenuto del file, utilizzare >> invece di>

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

Esempio

type nul >> your_file.txt

Modificato il 2020-04-07

Puoi anche usare il comando call .

Chiama un programma batch da un altro senza arrestare il programma batch padre. Il comando call accetta le etichette come destinazione della chiamata.

Esempio:

call >> your_file.txt

2
su Windows 7 la prima opzione produce una finestra di dialogo spaventosa, e poi vedi access deniednella console. La seconda opzione funziona bene!
Decodificato il

13
La risposta è sbagliata, funziona solo quando il file non esiste. Se il file esiste, usando >>il primo non fa nulla, il secondo aggiunge una riga alla fine del file. La risposta corretta è superuser.com/questions/10426/…
stenci il

3
@stenci - L'ho appena provato su un file inesistente e ha funzionato bene. Ha creato il file ok. Forse ti mancano i diritti di amministratore?
dcp,

2
@stenci quel link superutente è fantastico. Dovresti pubblicarlo come risposta.
Denise Skidmore,

@DeniseSkidmore Grazie, ho aggiunto la risposta. È molto profondo e le persone probabilmente leggeranno il mio commento a questa risposta piuttosto che la mia risposta, ma ora è lì.
stenci,

67

Windows non include nativamente un touchcomando.

È possibile utilizzare una qualsiasi delle versioni pubbliche disponibili oppure è possibile utilizzare la propria versione. Salvare questo codice come touch.cmde posizionarlo da qualche parte nel percorso

@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

Esaminerà l'elenco di argomenti e, per ogni elemento esistente, aggiornerà il timestamp del file, altrimenti lo creerà.


questo è il migliore, funziona esattamente come previsto ... altre soluzioni qui funzionano ma lasciano messaggi di avvertimento / errore, IDK se questo è esclusivo per me.
Shakil,

35

È possibile utilizzare questo comando: ECHO >> nomefile.txt

creerà un file con l'estensione indicata nella cartella corrente.

AGGIORNARE:

per un file vuoto usare: copia NUL nomefile.txt


8
Ancora meglio type NUL > filename(crea un file di 0 byte)
krzemian,

24
Come il tocco, questo non sovrascriverà il file se esiste:type NUL >> filename
henon,

3
Questo è un ottimo modo per aggiungere "ECHO è attivo". al tuo file.
ripvlan,

4
questo non aggiorna il timestamp dei file esistenti.
Denise Skidmore,

1
Penso che Denise Skidmore stia rispondendo a Henry, non a OP. (Secondo il suo commento.)
Keith Russell,


15

Sono sorpreso di quante risposte qui siano sbagliate . L'eco di nulla in un file riempirà il file con qualcosa di simile ECHO is ONe il tentativo di fare eco $nulin un file verrà letteralmente $nulinserito nel file. Inoltre per PowerShell, l'eco $nullin un file in realtà non crea un file 0kb, ma qualcosa di codificato come UCS-2 LE BOM, che può diventare disordinato se è necessario assicurarsi che i file non abbiano un segno di ordine byte.

Dopo aver testato tutte le risposte qui e fatto riferimento ad alcune simili, posso garantire che funzioneranno per shell di console. Basta passare FileName.FileExtensional percorso completo o relativo del file che si desidera touch; grazie a Keith Russell per l' COPY NUL FILE.EXTaggiornamento:

CMD con aggiornamenti timestamp

copy NUL FileName.FileExtension

Questo creerà un nuovo file chiamato qualunque cosa tu abbia inserito invece che FileName.FileExtensioncon una dimensione di 0 byte. Se il file esiste già, verrà sostanzialmente copiato sul posto per aggiornare il timestamp. Direi che si tratta di una soluzione alternativa alla funzionalità 1: 1 con touchma non conosco strumenti integrati per CMD in grado di eseguire l'aggiornamento del timestamp di un file senza modificarne l'altro contenuto.

CMD senza aggiornamenti di data e ora

if not exist FileName.FileExtension copy NUL FileName.FileExtension

Powershell con aggiornamenti di data e ora

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

Sì, funzionerà in console come one-liner; non è necessario inserirlo in un file di script di PowerShell.

PowerShell senza aggiornamenti di data / ora

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


1
Che dire della situazione in cui esiste il file e si desidera aggiornare il timestamp di modifica all'ora corrente? Non vedo come questi esempi ottengano ciò.
RoG

2
Grande osservazione, RoG! Ho aggiornato la risposta per rispondere a questo :)
kayleeFrye_onDeck il

Questa è la risposta migliore Tuttavia, lo migliorerei comunque sostituendolo fsutil file CreateNew FileName.FileExtension 0con copy NUL Filename.FileExtension, poiché quest'ultimo è più corto e fa la stessa cosa.
Keith Russell,

@KeithRussell IIRC c'era un motivo specifico non ho usato copysopra fsutilma è stato un po '... Sono abbastanza sicuro che è come ho anche imparato a conoscere fsutilhaha! Proverò a capire perché ...
kayleeFrye_onDeck il

1
Anche se si comportano allo stesso modo, immagino sia prematuro dire che uno è meglio, senza test di velocità.
Keith Russell,

14

Utilizzare il comando seguente nella riga di comando:

fsutil file createnew filename  requiredSize

Le informazioni sui parametri come segue:

fsutil - Utilità del file system (l'eseguibile in esecuzione)

file: attiva un'azione sul file

createnew: l'azione da eseguire (creare un nuovo file)

nome file: sarebbe letteralmente il nome del file

requiredSize: allocare una dimensione del file in byte nel file creato


2
Sono necessarie alcune spiegazioni affinché questa sia considerata una risposta decente. Non è chiaro cosa significano queste cinque parole.
jfriend00,

1
ha funzionato per me ... la cosa richiestaSize è strana però ... il comando riempie il tuo nuovo file con migliaia di NULLs ... strano ... quindi basta usare 0 ... genera un errore se salti la richiestaSize .. .
dsdsdsdsd

1
questo commnad necessita di privilegi di amministratore :(
ADJ

1
touch aggiorna anche il timestamp sui file esistenti, non solo crea nuovi file.
Denise Skidmore,

1
il tocco è un modo rapido per farlo, il più vicino potrebbe essere l'eco o il tipo, immagino, anche se questo è uno strumento molto utile per lo scripting e ampiamente usato in WS16, pollice in alto! docs.microsoft.com/en-us/windows-server/administration/…
Alan

10

Su Windows Power Shell, è possibile utilizzare il comando seguente:

New-Item <filename.extension>

o

New-Item <filename.extension> -type file

Nota: New-Item può essere sostituito con il suo alias ni


1
Questa è la vera risposta nel mondo Windows odierno in cui PowerShell è il programma predefinito della shell dei comandi.
RBT

non sono sicuro di quale Windows ti riferisca, ho appena installato un nuovo Windows 10 e Powershell non è sicuramente la shell predefinita. 'New-Item' is not recognized as an internal or external command
user5359531

8

Puoi replicare la funzionalità del tocco con il seguente comando:

$>>filename

Ciò che fa è tentare di eseguire un programma chiamato $, ma se $non esiste (o non è un eseguibile che produce output), non viene prodotto alcun output da esso. È essenzialmente un trucco sulla funzionalità, tuttavia verrà visualizzato il seguente messaggio di errore:

'$' non è riconosciuto come comando interno o esterno, programma eseguibile o file batch.

Se non vuoi il messaggio di errore, puoi fare una delle due cose:

type nul >> filename

O:

$>>filename 2>nul

Il typecomando tenta di visualizzare il contenuto di nul, che non fa altro che restituire un EOF (fine del file) quando viene letto.

2>nulinvia l'output di errore (output 2) a null (che ignora tutti gli input quando è scritto). Ovviamente il secondo comando (con 2>nul) è reso ridondante dal typecomando poiché è più veloce da digitare. Ma almeno ora hai l'opzione e la conoscenza.


Questo è fantastico, ma è %ERRORLEVEL%sempre diverso da zero. È possibile risolvere il problema aggiungendo un noop || cd., ma questo imposta sempre l'errore su 0, che potrebbe non essere quello desiderato se il "tocco" non riesce.
Keith Russell,

5

Nessun comando, typené nessuno dei due echo, è necessario per emulare il comando 'touch' di Unix / Mac OS X in un terminale Windows Powershell. Usa semplicemente la seguente scorciatoia:

$null > filename

Questo creerà un file vuoto chiamato 'nome file' nella posizione corrente. Utilizzare qualsiasi estensione di file che potrebbe essere necessario, ad esempio '.txt'.

Fonte: /superuser/502374/equivalent-of-linux-touch-to-create-an-empty-file-with-powershell (vedi commenti)


1
sembra che ti sei persoecho
sabithpocker,

@sabithpocker in Windows cmd, $ null non esiste e poiché non esiste non produce alcun output. Si $null > filenamemanda che la produzione vuoto per il nome del file (se mi spiego).
Keldon Alleyne,

1
@sabithpocker In Windows Powershell funziona senza echoNel terminale della riga di comando standard (cmd) è necessario echo. Dispiace per la confusione.
Oliver Schafeld,

@OliverSchafeld e Keldon Grazie per la spiegazione.
sabithpocker,

1
Ciò aggiunge una DBA al file.
kayleeFrye_onDeck

3

Puoi anche usare copy con [nomefile] in una finestra di comando di 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.

Ciò creerà un file denominato yourfile.txtnella directory locale.


3

come accennato

echo >> index.html

può essere qualsiasi file, con qualsiasi estensione quindi

notepad index.html

questo aprirà il tuo file nell'editor del blocco note


3

Io uso cmder(un emulatore della riga di comando)

Ti consente di eseguire tutti i comandi Linux all'interno di un computer Windows.

Può essere scaricato da https://cmder.net/

mi piace veramente


1
che succede con l'avviso "Unknown Publisher" quando provo ad aprire Cmder in win10? Bummer.
Chris22,

2

Supponendo che il file esista e devi solo aggiornare il timestamp.

type test.c > test.c.bkp && type test.c.bkp > test.c && del test.c.bkp

2

Dal terminale di Visual Code Studio su Windows 10, questo è ciò che ha funzionato per me per creare un nuovo file:

type > hello.js
echo > orange.js
ni > peach.js

1

Se hai Cygwin installato sul tuo PC, puoi semplicemente usare l'eseguibile fornito per touch (anche tramite il prompt dei comandi di Windows):

C:\cygwin64\bin\touch.exe <file_path>


-1

Yes you can use Node for Touch I just use that and its working all fine in windows Cmd or gitbash

inserisci qui la descrizione dell'immagine


I didn't downvote this but I'll explain why it probably was. This question was tagged with [cmd], and that implies that the OP wants an answer that works out-of-the-box for CMD, meaning no command-line utilities that aren't packed with a default Windows install. That will exclude virtually all scripting languages, even built-in Windows scripting languages like CScript, WScript, and PowerShell. The point is not that it works in the CMD env, but that its possible for anyone with access to CMD, not including permissions issues.
kayleeFrye_onDeck
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.