Entspricht Linux 'Touch', um eine leere Datei mit PowerShell zu erstellen? [doppelt]
Gibt es in PowerShell ein Äquivalent von touch
?
Zum Beispiel kann ich unter 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 Instanz von Notepad und speichere eine leere Datei.
Gibt es also in PowerShell eine programmatische Möglichkeit, dies zu tun?
Ich möchte das Berührungsverhalten nicht genau abgleichen, sondern nur das einfachste mögliche Äquivalent finden zum Erstellen leerer Dateien.
14 answers
Mit dem Append Redirector ">>" wird das Problem behoben, bei dem eine vorhandene Datei gelöscht wird:
echo $null >> filename
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2014-09-22 19:15:14
Um eine leere Datei zu erstellen:
New-Item -ItemType file example.txt
Um den Zeitstempel einer Datei zu aktualisieren:
(gci example.txt).LastWriteTime = Get-Date
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2014-09-30 06:18:23
Hier ist eine Version, die eine neue Datei erstellt, wenn sie nicht vorhanden ist, oder den Zeitstempel aktualisiert, wenn sie vorhanden ist.
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
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2013-03-25 12:47:36
In PowerShell können Sie eine ähnliche Touch-Funktion als solche erstellen:
function touch {set-content -Path ($args[0]) -Value ($null)}
Verwendung:
touch myfile.txt
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2012-11-07 19:32:59
Ich bevorzuge Format-Table für diese Aufgabe (mnemonic file touch):
ft > filename
Um mit nicht leeren Dateien zu arbeiten, können Sie Folgendes verwenden:
ft >> filename
Ich habe dies gewählt, weil es ein kurzer Befehl ist, der in diesem Zusammenhang nichts tut, a noop. Es ist auch schön, weil, wenn Sie die Umleitung vergessen:
ft filename
Anstatt dir einen Fehler zu geben, macht es einfach nichts. Einige andere Aliase
das wird funktionieren sind Format-Custom (fc
) und Formatweit (fw
).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-12-18 03:02:01
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 implizit ist, wenn eine Erweiterung hinzugefügt wird), sodass ich einfach schreiben kann, um eine Javascript-Datei mit dem Namen 'x' in meinem aktuellen Verzeichnis zu erstellen:
ni x.js
3 Zeichen schneller als Touch!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2017-06-15 16:45:40
Ich habe verschiedene Quellen zusammengestellt und Folgendes gefunden, das meinen Bedürfnissen entsprach. Ich musste das Schreibdatum einer DLL festlegen, die auf einem Computer 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2013-02-25 15:52:02
Es sieht so aus, als würden einige der Antworten hier keine Dateicodierung berücksichtigen.
Ich bin gerade aus verschiedenen anderen Gründen auf dieses Problem gestoßen, aber
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 irgendeinem Grund scheinen fc > $file
und fc >> $file
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) Codierungen, die Out-File unterstützt, sind: [[-Encoding] {unknown | string | unicode | bigendianunicode | utf8 | utf7 | utf32 | ascii | Standard | Soem/}]. Sie können auch Sachen zu Out-File, um der Datei einige Textdaten zum Speichern zu geben, und auch ein-append Flag. 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:
echo foo | Out-File .\stuff.txt -Encoding ascii -Append
Obwohl es den Nebeneffekt hat, "foo" an das Ende der Datei anzuhängen.
Wenn Sie sich nicht sicher sind, welche Kodierung Sie haben, die ich gefunden habe VS-Code hat eine raffinierte Funktion, bei der in der unteren rechten Ecke steht, was die Codierung ist. Ich denke, Notepad++ hat auch eine ähnliche Funktion.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2017-03-08 23:30:09
ac file.txt $null
Löscht den Dateiinhalt nicht, aktualisiert aber auch nicht das Datum.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2013-08-12 12:52:52
Öffnen Sie Ihre Profildatei:
notepad $profile
Fügen Sie die folgende Zeile hinzu:
function touch {New-Item "$args" -ItemType File}
Speichern Sie es und laden Sie Ihr $profile neu, um es sofort zu verwenden. (Keine Notwendigkeit, Powershell zu schließen und zu öffnen)
. $profile
Um eine neue Datei im aktuellen Verzeichnistyp hinzuzufügen:
touch testfile.txt
Um eine neue Datei in 'myfolder' Verzeichnistyp hinzuzufügen:
touch myfolder\testfile.txt
Wenn eine Datei mit demselben Namen bereits vorhanden ist, wird sie nicht überschrieben. Stattdessen erhalten Sie einen Fehler.
Ich hoffe, es hilft
Bonus Spitze:
Sie können das Äquivalent von 'mkdir' erstellen, indem Sie die folgende Zeile hinzufügen:
function mkdir {New-Item "$args" -ItemType Directory}
Gleiche Verwendung:
mkdir testfolder
mkdir testfolder\testsubfolder
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2013-03-08 12:47:19
Für das von Ihnen beschriebene Szenario (wenn die Datei nicht existiert) ist dies schnell und einfach:
PS> sc example.txt $null
Die andere häufige Verwendung von touch
besteht jedoch darin, den Zeitstempel der Datei zu aktualisieren. Wenn Sie versuchen, mein sc
Beispiel auf diese Weise zu verwenden, wird der Inhalt der Datei gelöscht.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2013-02-25 22:19:10
Ich habe den Namen "Write-File" verwendet, weil "Touch" kein genehmigtes PowerShell-Verb ist. Ich benenne es jedoch immer noch als Touch.
Berühren.psm1
<#
.Synopsis
Creates a new file or updates the modified date of an existing file.
.Parameter Path
The path of the file to create or update.
#>
Function Write-File {
[CmdletBinding()]
Param(
[Parameter( Mandatory=$True, Position=1 )]
[string] $Path,
[switch] $WhatIf,
[System.Management.Automation.PSCredential] $Credential
)
$UseVerbose = $PSCmdlet.MyInvocation.BoundParameters['Verbose'].IsPresent -eq $True
$UseDebug = $PSCmdlet.MyInvocation.BoundParameters['Debug'].IsPresent -eq $True
$TimeStamp = Get-Date
If( -Not [System.Management.Automation.WildcardPattern]::ContainsWildcardCharacters( $Path ) ) {
New-Item -ItemType:File -Verbose:$UseVerbose -Debug:$UseDebug -WhatIf:$WhatIf -Credential $Credential -Path $Path -ErrorAction SilentlyContinue -Confirm:$False | Out-Null
}
Set-ItemProperty -Verbose:$UseVerbose -Debug:$UseDebug -WhatIf:$WhatIf -Credential $Credential -Path $Path -Name LastWriteTime -Value:$TimeStamp -Confirm:$False | Out-Null
}
Set-Alias -Name touch -Value Write-File
Export-ModuleMember -Function Write-File
Export-ModuleMember -Alias touch
Usage:
Import-Module ./Touch.psm1
touch foo.txt
Unterstützt:
- Pfade in anderen Verzeichnissen
-
Credential
für Netzwerkpfade -
Verbose
,Debug
, undWhatIf
flags - Platzhalter (nur Aktualisierung des Zeitstempels)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2017-03-23 01:32:35
Um eine leere Datei in Windows zu erstellen, ist der Fastenweg der folgende:
fsutil file createnew file.name 0
Die Null ist Dateigröße in Bytes, daher ist dies auch nützlich, um große Dateien zu erstellen (sie sind zum Testen der Komprimierung nicht nützlich, da sie keine tatsächlichen Daten enthalten und auf so ziemlich nichts komprimiert werden)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2015-11-02 14:58:44
Die Webseite http://xahlee.info/powershell/PowerShell_for_unixer.html schlägt vor:
new-item -type file [filename]
Und dies erzeugt tatsächlich eine neue Datei der Größe Null.
Dies führt nicht die andere Funktion von Unix touch
aus, nämlich den Zeitstempel zu aktualisieren, wenn Dateiname bereits vorhanden ist, aber die Frage impliziert, dass der Benutzer nur eine Datei mit der Größe Null erstellen möchte interaktiv ohne auf Notepad zurückzugreifen.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-05-06 06:36:24