Mit dem Append-Redirector ">>" wird das Problem behoben, bei dem eine vorhandene Datei gelöscht wird:
echo $null >> filename
Gibt es in PowerShell ein Äquivalent dazu touch
?
Zum Beispiel kann ich in Linux eine neue leere Datei erstellen, indem ich Folgendes aufrufe:
touch filename
Unter Windows ist das ziemlich umständlich - normalerweise öffne ich einfach eine neue Notepad-Instanz und speichere eine leere Datei.
Gibt es in PowerShell eine programmatische Möglichkeit, dies zu tun?
Ich bin nicht darauf aus, das Verhalten der Berührungen genau anzupassen, sondern nur das einfachste Äquivalent zum Erstellen leerer Dateien zu finden.
Mit dem Append-Redirector ">>" wird das Problem behoben, bei dem eine vorhandene Datei gelöscht wird:
echo $null >> filename
Hier ist eine Version, mit der eine neue Datei erstellt wird, wenn sie nicht vorhanden ist, oder der Zeitstempel aktualisiert wird, wenn er existiert.
Function Touch-File { $file = $args[0] if($file -eq $null) { throw "No filename supplied" } if(Test-Path $file) { (Get-ChildItem $file).LastWriteTime = Get-Date } else { echo $null > $file } }
So erstellen Sie eine leere Datei:
New-Item -ItemType file example.txt
So aktualisieren Sie den Zeitstempel einer Datei:
(gci example.txt).LastWriteTime = Get-Date
In PowerShell you can create a similar Touch function as such:
function touch
Usage:
touch myfile.txt
ich bevorzuge
fc > filename
für diese Aufgabe. Um mit nicht leeren Dateien zu arbeiten, können Sie verwenden
fc >> filename
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 tut, ein Noop . Es ist auch schön, wenn man die Weiterleitung vergisst
fc filename
Anstatt dir einen Fehler zu geben, tut es einfach nichts. Einige andere Aliase, die funktionieren werden, sind
ft -> Format-Table fw -> Format-Wide
Ich habe verschiedene Quellen zusammengestellt und bin mit den folgenden Informationen fertig geworden, die meinen Bedürfnissen entsprachen. Ich musste das Schreibdatum einer DLL festlegen, die auf einer Maschine in einer anderen Zeitzone erstellt wurde:
$update = get-date Set-ItemProperty -Path $dllPath -Name LastWriteTime -Value $update
Natürlich können Sie es auch für mehrere Dateien festlegen:
Get-ChildItem *.dll | Set-ItemProperty -Name LastWriteTime -Value $update
Es gibt bereits eine Reihe würdiger Antworten, aber ich mag den Alias von New-Item, der einfach: ni ist
Sie können auch auf die Dateitypdeklaration verzichten (was ich implizit beim Hinzufügen einer Erweiterung ansehe). Um eine Javascript-Datei mit dem Namen 'x' in meinem aktuellen Verzeichnis zu erstellen, kann ich einfach schreiben:
ni x.js
3 Zeichen schneller als Berührung!
Open your profile file:
notepad $profile
Add the following line:
function touch
Save it and reload your $profile in order to use it straight away. (No need to close and open powershell)
. $profile
To add a new file in the current directory type:
touch testfile.txt
To add a new file inside 'myfolder' directory type:
touch myfolder\testfile.txt
If a file with the same name already exists, it won't be overidden. Instead you'll get an error.
I hope it helps
Bonus tip:
You can make the equivalent of 'mkdir' adding the following line:
function mkdir
Same use:
mkdir testfolder mkdir testfolder\testsubfolder
ac file.txt $null
Löscht den Inhalt der Datei nicht, aktualisiert aber auch nicht das Datum.
Es sieht so aus, als würden einige Antworten hier nicht für die Dateikodierung verantwortlich sein.
Ich bin gerade aus verschiedenen Gründen auf dieses Problem gestoßen
echo $null > $file $null > $file
beide erzeugen eine UTF-16-LE-Datei, während
New-Item $file -type file
erzeugt eine UTF-8-Datei.
Aus welchem Grunde fc > $file
und fc >> $file
scheint auch UTF-8 - Dateien zu erzeugen.
Out-File $file -encoding utf8
gibt Ihnen eine UTF-8-BOM-Datei, während
Out-File $file -encoding ascii
gibt Ihnen eine UTF-8-Datei. Andere gültige (aber nicht getestete) Kodierungen, die Out-File unterstützt, sind: [[-Encoding] ]. Sie können auch Daten an Out-File weiterleiten, um der Datei einige zu speichernde Textdaten sowie ein -append-Flag zu geben. Zum Beispiel:
echo $null | Out-File .\stuff.txt -Encoding ascii -Append
In diesem Beispiel wird der Zeitstempel aus irgendeinem Grund nicht aktualisiert, aber in diesem Beispiel gilt Folgendes:
echo foo | Out-File .\stuff.txt -Encoding ascii -Append
Obwohl es den Nebeneffekt hat, dass "foo" an das Ende der Datei angehängt wird.
Wenn Sie sich nicht sicher sind, welche Kodierung Sie haben, habe ich festgestellt, dass VS-Code eine praktische Funktion hat, in der sich in der rechten unteren Ecke die Kodierung befindet. Ich denke, Notepad ++ hat auch eine ähnliche Funktion.