Diese Frage hat hier bereits eine Antwort:
- Windows-Äquivalent zum Linux-Befehl 'touch'? 31 Antworten
Gibt es in PowerShell ein Äquivalent von touch
?
Unter Linux kann ich beispielsweise eine neue leere Datei erstellen, indem ich Folgendes aufrufe:
touch filename
Unter Windows ist das ziemlich umständlich - normalerweise öffne ich nur eine neue Instanz von Editor und speichere eine leere Datei.
Gibt es in PowerShell eine programmgesteuerte Möglichkeit, dies zu tun?
Ich versuche nicht, das Berührungsverhalten genau abzugleichen, sondern nur das einfachste Äquivalent zum Erstellen leerer Dateien zu finden.
windows
windows-8
powershell
powershell-3.0
jsalonen
quelle
quelle
touch
in Linux machen kann.touch
für eine vorhandene Datei, um die letzte Schreibzeit zu aktualisieren, ohne die Datei zu ändern. Siehe die Links von @amiregelz. Diese Frage hat ein hohes Google-Rankingpowershell touch
. Ich wollte Kopierer darauf aufmerksam machen, dass nur diese eine Hälfte Daten zerstören kann, wenn * nix touch dies nicht tut. Siehe @LittleBoyLost-Antwort, die behandelt, wenn die Datei bereits vorhanden ist.Antworten:
Die Verwendung des Append-Redirectors ">>" behebt das Problem, bei dem eine vorhandene Datei gelöscht wird:
quelle
$null > filename
funktioniert super..gitignore
mit diesem Befehl einen zu erstellen und fragst dich , warum das nicht funktioniert. Stückliste ist der Grund.So erstellen Sie eine leere Datei:
So aktualisieren Sie den Zeitstempel einer Datei:
quelle
(gi MyFolder).LastWriteTime = Get-Date
. Sie können dies auch für Dateien verwenden.ni example.txt
In dieser Version wird eine neue Datei erstellt, wenn sie nicht vorhanden ist, oder der Zeitstempel aktualisiert, wenn er vorhanden ist.
quelle
Touch
handelt es sich nicht um ein "zugelassenes" Verb (dies ist jedoch keine wesentliche Voraussetzung: msdn.microsoft.com/en-us/library/ms714428 aspx ).File
ist in Ordnung, übrigens. Ich empfehle die NamenSet-File
oderSet-LastWriteTime
oder, mein Favorit,Update-File
. Auch würde ichAdd-Content $file $null
statt empfehlenecho $null > $file
. LegenSet-Alias touch Update-File
Sie schließlich einen Alias für fest, wenn Sie den Befehl weiterhin verwenden möchtentouch
New-Alias -Name Touch Touch-File
In PowerShell können Sie eine ähnliche Touch-Funktion erstellen:
Verwendungszweck:
touch myfile.txt
Quelle
quelle
function touch { if((Test-Path -Path ($args[0])) -eq $false) { set-content -Path ($args[0]) -Value ($null) } }
ich bevorzuge
für diese Aufgabe. Um mit nicht leeren Dateien zu arbeiten, können Sie verwenden
fc
ist einfach ein Alias für Format-Custom . Ich habe es gewählt, weil es ein kurzer Befehl ist, der in diesem Zusammenhang nichts bewirkt , ein Noop . Es ist auch schön, wenn Sie die Umleitung vergessenAnstatt Ihnen einen Fehler zu machen, tut es einfach nichts. Einige andere Aliase, die funktionieren werden, sind
quelle
Es gibt bereits eine Reihe würdiger Antworten, aber ich mag den Alias von New-Item, der nur lautet: ni
Sie können auch auf die Dateitypdeklaration verzichten (von der ich annehme, dass sie impliziert ist, wenn eine Erweiterung hinzugefügt wird). Um eine Javascript-Datei mit dem Namen 'x' in meinem aktuellen Verzeichnis zu erstellen, kann ich einfach Folgendes schreiben:
3 Zeichen schneller als berühren!
quelle
ni : The file 'x.js' already exists
Ich stellte verschiedene Quellen zusammen und schloss mit den folgenden, die meinen Bedürfnissen entsprachen. Ich musste das Schreibdatum einer DLL festlegen, die auf einem Computer in einer anderen Zeitzone erstellt wurde:
Natürlich können Sie es auch für mehrere Dateien festlegen:
quelle
Öffnen Sie Ihre Profildatei:
Fügen Sie die folgende Zeile hinzu:
Speichern Sie es und laden Sie Ihr $ -Profil erneut, um es sofort zu verwenden. (Keine Notwendigkeit, Powershell zu schließen und zu öffnen)
So fügen Sie eine neue Datei in das aktuelle Verzeichnis ein:
So fügen Sie eine neue Datei in das Verzeichnis "myfolder" ein:
Wenn bereits eine Datei mit demselben Namen vorhanden ist, wird diese nicht überschrieben. Stattdessen erhalten Sie eine Fehlermeldung.
Ich hoffe, es hilft
Bonus-Tipp:
Sie können das Äquivalent von 'mkdir' erstellen, indem Sie die folgende Zeile hinzufügen:
Gleiche Verwendung:
quelle
Der Dateiinhalt wird nicht gelöscht, aber das Datum wird auch nicht aktualisiert.
quelle
Es sieht so aus, als würden einige Antworten hier nicht die Dateicodierung berücksichtigen.
Ich bin nur aus verschiedenen anderen Gründen auf dieses Problem gestoßen, aber
beide erzeugen eine UTF-16-LE-Datei, während
erzeugt eine UTF-8-Datei.
Aus welchem Grund auch immer
fc > $file
undfc >> $file
, scheinen auch UTF-8-Dateien zu produzieren.gibt Ihnen eine UTF-8-BOM-Datei, während
gibt Ihnen eine UTF-8-Datei. Andere gültige (aber nicht getestete) Codierungen, die Out-File unterstützt, sind: [[-Encoding] {unknown | Zeichenfolge | Unicode | bigendianunicode | utf8 | utf7 | utf32 | ascii | default | oem}]. Sie können auch Pipes an Out-File senden, um der Datei einige zu speichernde Textdaten sowie ein -append-Flag zuzuweisen. Zum Beispiel:
In diesem Beispiel wird der Zeitstempel aus irgendeinem Grund nicht aktualisiert, in diesem Beispiel jedoch:
Obwohl es den Nebeneffekt hat, "foo" an das Ende der Datei anzuhängen.
Wenn Sie sich nicht sicher sind, über welche Codierung Sie verfügen, hat VS-Code eine nützliche Funktion, in der in der unteren rechten Ecke angegeben ist, wie die Codierung lautet. Ich denke, Notepad ++ hat auch eine ähnliche Funktion.
quelle
Set-Content -Path $file -value $null
erledigt den Job und es hat keinen Einfluss auf die Dateicodierung. Überprüfen Sie auch die ss64-Version vontouch
.Für das von Ihnen beschriebene Szenario (wenn die Datei nicht vorhanden ist) ist dies schnell und einfach:
Die andere gebräuchliche Verwendung
touch
ist jedoch das Aktualisieren des Zeitstempels der Datei. Wenn Sie versuchen, meinsc
Beispiel auf diese Weise zu verwenden, wird der Inhalt der Datei gelöscht.quelle
sc
bedeutet Bearbeiten: herausgefunden ("Set Content")Um eine leere Datei in Windows zu erstellen, gehen Sie wie folgt vor:
Die Null ist die Dateigröße in Bytes, daher ist dies auch nützlich, um große Dateien zu erstellen (sie sind nicht nützlich, um die Komprimierung zu testen, da sie keine tatsächlichen Daten enthalten und so gut wie nichts komprimieren).
quelle
Die Webseite http://xahlee.info/powershell/PowerShell_for_unixer.html schlägt vor:
und dies erzeugt tatsächlich eine neue Datei der Größe Null.
Dies führt nicht die andere Funktion von Unix aus
touch
, nämlich das Aktualisieren des Zeitstempels, wenn der Dateiname bereits vorhanden ist. Die Frage impliziert jedoch, dass der Benutzer nur eine Datei mit der Größe Null interaktiv erstellen möchte, ohne auf Notepad zurückzugreifen.quelle
Ich habe den Namen "Write-File" verwendet, weil "Touch" kein zugelassenes PowerShell-Verb ist . Ich alias es dennoch als Berührung.
Touch.psm1
Verwendungszweck:
Unterstützt:
Credential
für NetzwerkpfadeVerbose
,Debug
UndWhatIf
Fahnenquelle
New-Item
Befehl wurde in vier vorherigen Antworten angeboten. Sie haben einen Wrapper mit 20 Zeilen bereitgestellt. Können Sie etwas klarer erklären, welchen Vorteil Ihre Lösung gegenüber den früheren hat? Zum Beispiel, was sind dieseVerbose
,Debug
undWhatIf
Fahnen, etc?New-Item
Aktualisierung des Zeitstempels vorhandener Dateien.