Windows-Äquivalent zu 'touch' (dh die Methode von node.j zum Erstellen einer index.html)

195

Auf einem Windows-Computer wird dieser Fehler angezeigt

'touch' wird nicht als interner oder externer Befehl, bedienbares Programm oder Batchdatei erkannt.

wenn ich den Anweisungen folge :

touch index.html app.js style.css

Gibt es ein Windows-Äquivalent zur Verwendung von "Touch"? Muss ich diese Dateien von Hand erstellen (und ändern, um den Zeitstempel zu ändern), um diese Art von Befehl zu implementieren? Das scheint nicht sehr ... knotenhaft ...

CuriousAboutNode
quelle
5
Eine einfache Google-Suche zeigt Ihnen viele Windows-Implementierungen von touch. Weitere Diskussionen hier: superuser.com/questions/10426/… und die Cygwin-Bibliothek ist ein allgemeines Toolset von Unix-Befehlen unter Windows.
jfriend00
4
Mögliches Duplikat dieser Frage: stackoverflow.com/questions/26343974/…
Plastic Sturgeon
Mögliches Duplikat von Datei erstellen mit Befehlszeile in Node
phuclv
1
Bitte springen Sie direkt zu Raghuveers Antwort, wenn Sie mit PowerShell hier gelandet sind.
RBT

Antworten:

279

in cmd Fenstertyp:

type nul > your_file.txt

Dadurch werden 0 Bytes in der Datei your_file.txt erstellt.

Eine andere Möglichkeit ist die Verwendung des Befehls echo :

echo.> your_file.txt

Echo. - erstellt eine Datei mit einer leeren Zeile.

Bearbeitet am 01.04.2019:

Wenn Sie den Inhalt der Datei beibehalten müssen, verwenden Sie >> anstelle von>

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

Beispiel

type nul >> your_file.txt

Bearbeitet am 07.04.2020

Sie können auch den Aufrufbefehl verwenden .

Ruft ein Stapelverarbeitungsprogramm von einem anderen auf, ohne das übergeordnete Stapelverarbeitungsprogramm zu stoppen. Der Aufrufbefehl akzeptiert Beschriftungen als Ziel des Anrufs.

Beispiel:

call >> your_file.txt
Vlad Bezden
quelle
2
Unter Windows 7 erzeugt die erste Option einen beängstigenden Dialog, den Sie dann access deniedin der Konsole sehen. Die zweite Option funktioniert gut!
Decoded
13
Die Antwort ist falsch, es funktioniert nur, wenn die Datei nicht existiert. Wenn die Datei vorhanden ist und >>die erste nichts bewirkt, fügt die zweite eine Zeile am Ende der Datei hinzu. Die richtige Antwort ist superuser.com/questions/10426/...
stenci
3
@stenci - Ich habe es gerade mit einer nicht existierenden Datei versucht und es hat gut funktioniert. Es hat die Datei ok erstellt. Möglicherweise fehlen Ihnen Administratorrechte?
DCP
2
@stenci, dass der Superuser-Link großartig ist. Sie sollten es als Antwort posten.
Denise Skidmore
@DeniseSkidmore Danke, ich habe die Antwort hinzugefügt. Es ist tief und die Leute werden eher meinen Kommentar zu dieser Antwort lesen als meine Antwort, aber jetzt ist es da.
Stenci
66

Windows enthält nativ keinen touchBefehl.

Sie können jede der verfügbaren öffentlichen Versionen oder Ihre eigene Version verwenden. Speichern Sie diesen Code als touch.cmdund platzieren Sie ihn irgendwo in Ihrem Pfad

@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

Die Argumentliste wird durchlaufen, und für jedes Element, falls vorhanden, wird der Zeitstempel der Datei aktualisiert, andernfalls wird er erstellt.

MC ND
quelle
35

Sie können diesen Befehl verwenden: ECHO >> filename.txt

Es wird eine Datei mit der angegebenen Erweiterung im aktuellen Ordner erstellt.

AKTUALISIEREN:

Verwenden Sie für eine leere Datei: Kopieren Sie NUL filename.txt

Aaron Clark
quelle
8
Noch besser type NUL > filename(erstellt eine 0-Byte-Datei)
krzemian
23
Wie bei Touch wird die Datei nicht überschrieben, wenn sie vorhanden ist:type NUL >> filename
Henon
3
Dies ist eine großartige Möglichkeit, um "ECHO ist eingeschaltet" hinzuzufügen. zu Ihrer Datei.
Ripvlan
4
Dadurch wird der Zeitstempel vorhandener Dateien nicht aktualisiert.
Denise Skidmore
1
Ich denke, Denise Skidmore reagiert auf Henon, nicht auf OP. (Ich stimme ihrem Kommentar zu.)
Keith Russell
28

Die Antwort ist falsch, es funktioniert nur, wenn die Datei nicht existiert. Wenn die Datei vorhanden ist und die erste nichts bewirkt, fügt die zweite eine Zeile am Ende der Datei hinzu.

Die richtige Antwort ist:

copy /b filename.ext +,,

Ich habe es hier gefunden: /superuser/10426/windows-equivalent-of-the-linux-command-touch/764721#764721

stenci
quelle
1
Diese Antwort funktioniert nicht, wenn die Datei nicht vorhanden ist. (CMD erzeugt einen Fehler.)
Keith Russell
15

Ich bin überrascht, wie viele Antworten hier einfach falsch sind . Wenn Sie nichts in eine Datei zurückgeben, wird die Datei mit etwas Ähnlichem gefüllt ECHO is ON, und wenn Sie versuchen, $nulin eine Datei wiederzugeben, wird dies buchstäblich $nulin die Datei eingefügt. Darüber hinaus führt das Echo $nullin eine Datei bei PowerShell nicht zu einer 0-KB-Datei, sondern zu einer codierten Datei, UCS-2 LE BOMdie unordentlich werden kann, wenn Sie sicherstellen müssen, dass Ihre Dateien keine Byte-Reihenfolge aufweisen.

Nachdem ich alle Antworten hier getestet und auf einige ähnliche verwiesen habe, kann ich garantieren, dass diese pro Konsolen-Shell funktionieren. Wechseln Sie einfach FileName.FileExtensionin den vollständigen oder relativen Pfad der gewünschten Datei touch. danke an Keith Russell für das COPY NUL FILE.EXTUpdate:

CMD mit Zeitstempel-Updates

copy NUL FileName.FileExtension

Dadurch wird eine neue Datei mit dem Namen "Was auch immer Sie platziert haben" FileName.FileExtensionmit einer Größe von 0 Byte erstellt. Wenn die Datei bereits vorhanden ist, kopiert sie sich grundsätzlich an Ort und Stelle, um den Zeitstempel zu aktualisieren. Ich würde sagen, dies ist eher eine Problemumgehung als eine 1: 1-Funktionalität, touchaber ich kenne keine integrierten Tools für CMD, mit denen der Zeitstempel einer Datei aktualisiert werden kann, ohne den anderen Inhalt zu ändern.

CMD ohne Zeitstempel-Updates

if not exist FileName.FileExtension copy NUL FileName.FileExtension

Powershell mit Zeitstempel-Updates

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

Ja, es funktioniert in der Konsole als Einzeiler. Es ist nicht erforderlich, es in einer PowerShell-Skriptdatei abzulegen.

PowerShell ohne Zeitstempel-Updates

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

kayleeFrye_onDeck
quelle
1
Was ist mit der Situation, in der die Datei vorhanden ist und Sie ihren Änderungszeitstempel auf die aktuelle Zeit aktualisieren möchten? Ich sehe nicht, wie diese Beispiele das erreichen.
RoG
2
Tolle Beobachtung, RoG! Ich habe die Antwort aktualisiert, um dies zu
beheben
Dies ist die beste Antwort. Allerdings würde ich es immer noch durch den Austausch verbessern fsutil file CreateNew FileName.FileExtension 0durch copy NUL Filename.FileExtension, da diese kürzer ist und tut das Gleiche.
Keith Russell
@KeithRussell IIRC gibt es einen bestimmten Grund , warum ich nicht verwenden , copyüber , fsutilaber es ist ein gewesen , während ... Ich bin ziemlich sicher , das ist , wie ich selbst darüber gelernt , fsutilhaha! Ich werde versuchen herauszufinden, warum ...
kayleeFrye_onDeck
1
Selbst wenn sie sich gleich verhalten, ist es für mich verfrüht zu sagen, dass einer besser ist, ohne Geschwindigkeitstests.
Keith Russell
14

Verwenden Sie den folgenden Befehl in Ihrer Befehlszeile:

fsutil file createnew filename  requiredSize

Die Parameterinfo wie folgt:

fsutil - Dateisystem-Dienstprogramm (die ausführbare Datei, die Sie ausführen)

Datei - Löst eine Dateiaktion aus

createnew - die auszuführende Aktion (neue Datei erstellen)

Dateiname - wäre buchstäblich der Name der Datei

requireSize - würde eine Dateigröße in Bytes in der erstellten Datei zuweisen

Ofer Haber
quelle
2
Einige Erklärungen sind erforderlich, damit dies als anständige Antwort angesehen werden kann. Es ist nicht klar, was diese fünf Wörter bedeuten.
jfriend00
1
hat für mich funktioniert ... die Sache mit der erforderlichen Größe ist allerdings seltsam ... der Befehl füllt Ihre neue Datei nur mit Tausenden von NULLs ... seltsam ... also verwenden Sie einfach 0 ... erzeugt einen Fehler, wenn Sie die erforderliche Größe überspringen. .
dsdsdsdsd
1
Dieser Commnad benötigt Administratorrechte :(
ADJ
1
touch aktualisiert auch den Zeitstempel für vorhandene Dateien und erstellt nicht nur neue Dateien.
Denise Skidmore
1
Touch ist ein schneller Weg, es zu tun, am nächsten wäre es Echo oder Typ, denke ich, obwohl dies ein sehr praktisches Tool für Skripte ist und in WS16 weit verbreitet ist, Daumen hoch! docs.microsoft.com/en-us/windows-server/administration/…
Alan
10

Unter Windows Power Shell können Sie den folgenden Befehl verwenden:

New-Item <filename.extension>

oder

New-Item <filename.extension> -type file

Hinweis: New-Item kann durch seinen Alias ni ersetzt werden

Raghuveer
quelle
1
Dies ist die eigentliche Antwort in der heutigen Windows-Welt, in der PowerShell das Standard-Befehls-Shell-Programm ist.
RBT
Ich bin mir nicht sicher, auf welches Windows Sie sich beziehen. Ich habe gerade ein neues Windows 10 installiert und Powershell ist definitiv nicht die Standard-Shell. 'New-Item' is not recognized as an internal or external command
user5359531
8

Sie können die Funktionalität von touch mit dem folgenden Befehl replizieren:

$>>filename

Dies bedeutet, dass versucht wird, ein aufgerufenes Programm auszuführen. $Wenn es $jedoch nicht vorhanden ist (oder keine ausführbare Datei ist, die eine Ausgabe erzeugt), wird von dieser keine Ausgabe erzeugt. Es ist im Wesentlichen ein Hack auf die Funktionalität, es wird jedoch die folgende Fehlermeldung angezeigt:

'$' wird nicht als interner oder externer Befehl, bedienbares Programm oder Batchdatei erkannt.

Wenn Sie die Fehlermeldung nicht möchten, können Sie zwei Dinge tun:

type nul >> filename

Oder:

$>>filename 2>nul

Der typeBefehl versucht, den Inhalt von nul anzuzeigen, der beim Lesen nur eine EOF (Dateiende) zurückgibt.

2>nulsendet eine Fehlerausgabe (Ausgabe 2) an nul (die alle Eingaben beim Schreiben ignoriert). Offensichtlich wird der zweite Befehl (mit 2>nul) durch den typeBefehl überflüssig gemacht, da er schneller eingegeben werden kann. Aber zumindest haben Sie jetzt die Option und das Wissen.

Keldon Alleyne
quelle
Das ist großartig, aber es wird %ERRORLEVEL%immer auf ungleich Null gesetzt. Sie können dieses Problem beheben, indem Sie ein Noop anhängen. Dadurch || cd.wird der Fehler jedoch immer auf 0 gesetzt. Dies ist möglicherweise nicht das, was Sie möchten, wenn die "Berührung" fehlschlägt.
Keith Russell
5

Es ist weder ein Befehl typenoch ein Befehl echoerforderlich, um den Touch-Befehl von Unix / Mac OS X in einem Windows Powershell-Terminal zu emulieren. Verwenden Sie einfach die folgende Kurzform:

$null > filename

Dadurch wird an Ihrem aktuellen Speicherort eine leere Datei mit dem Namen "Dateiname" erstellt. Verwenden Sie eine beliebige Dateinamenerweiterung, z. B. '.txt'.

Quelle: /superuser/502374/equivalent-of-linux-touch-to-create-an-empty-file-with-powershell (siehe Kommentare)

Oliver Schafeld
quelle
1
es sieht so aus, als echo
hättest
@sabithpocker in Windows cmd, $ null existiert nicht und da es nicht existiert, erzeugt es keine Ausgabe. Sie $null > filenamesenden diese leere Ausgabe an den Dateinamen (wenn Sie meinen Drift abfangen).
Keldon Alleyne
1
@sabithpocker In Windows Powershell funktioniert es ohne echoIm Standard-Befehlszeilenterminal (cmd), das Sie benötigen echo. Entschuldigung für die Verwirrung.
Oliver Schafeld
@OliverSchafeld und Keldon Vielen Dank für die Erklärung.
Sabithpocker
1
Dadurch wird der Datei eine Stückliste hinzugefügt.
KayleeFrye_onDeck
3

Sie können copy con [Dateiname] auch in einem Windows-Befehlsfenster (cmd.exe) verwenden:

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

Dadurch wird eine Datei mit dem Namen yourfile.txtim lokalen Verzeichnis erstellt.

delliottg
quelle
3

wie erwähnt

echo >> index.html

Es kann sich um eine beliebige Datei mit einer beliebigen Erweiterung handeln

notepad index.html

Dadurch wird Ihre Datei im Editor geöffnet

Boris
quelle
3

Ich benutze cmder(einen Kommandozeilenemulator)

Sie können alle Linux-Befehle auf einem Windows-Computer ausführen.

Es kann von https://cmder.net/ heruntergeladen werden.

ich mag es wirklich

user1880531
quelle
1
Was ist mit der Warnung "Unbekannter Publisher" los, wenn ich versuche, Cmder in win10 zu öffnen? Schade.
Chris22
2

Angenommen, die Datei ist vorhanden und Sie müssen nur den Zeitstempel aktualisieren.

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

Über das Terminal von Visual Code Studio unter Windows 10 konnte ich eine neue Datei erstellen:

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

Wenn Sie Cygwin auf Ihrem PC installiert haben , können Sie einfach die mitgelieferte ausführbare Datei zum Anfassen verwenden (auch über die Windows-Eingabeaufforderung):

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

Einfach, Beispiel mit txt-Datei

echo $null >> filename.txt
Thiago Maciel
quelle
Fügt $nullder Datei hinzu.
Tomáš Zato - Wiedereinsetzung Monica
-1

Ja, Sie können Node for Touch verwenden. Ich verwende das einfach und es funktioniert einwandfrei in Windows Cmd oder Gitbash

Geben Sie hier die Bildbeschreibung ein

Asad Iftikhar
quelle
Ich habe das nicht abgelehnt, aber ich werde erklären, warum es wahrscheinlich war. Diese Frage wurde mit dem Tag versehen. Dies [cmd]bedeutet, dass das OP eine sofort einsatzbereite Antwort für CMD wünscht, dh keine Befehlszeilenprogramme, die nicht mit einer Standard-Windows-Installation gepackt sind. Dadurch werden praktisch alle Skriptsprachen ausgeschlossen, auch integrierte Windows-Skriptsprachen wie CScript, WScript und PowerShell. Der Punkt ist nicht, dass es in der CMD-Umgebung funktioniert, sondern dass es für jeden möglich ist, der Zugriff auf CMD hat, ohne Berechtigungsprobleme.
KayleeFrye_onDeck