2009-07-21 21:44:38 +0000 2009-07-21 21:44:38 +0000
179
179

Windows-Entsprechung des Linux-Befehls 'touch'?

Was verwenden Sie, wenn Sie das datumsmodifizierte Feld einer Datei unter Windows aktualisieren möchten?

  1. Befehle, die über C++, .NET, C# oder etwas Natives für Windows (vorzugsweise Vista) zugänglich sind
  2. Werkzeuge/Anwendungen vorzugsweise frei, und wenn möglich auch Open Source

Bearbeiten: es gibt bereits eine Seite für Anwendungen, wie von CheapScotsman hier aufgezeigt.

Wenn jemand weiß, wie ich das über C++, C#, WSH oder etwas ähnliches tun kann, gut und schön, sonst würde ich denken, daß alles andere in der verlinkten Frage abgedeckt ist.

Antworten (27)

162
162
162
2008-09-09 09:13:05 +0000

Ich habe unxutils benutzt und empfehle [ unxutils ]&003, bei denen es sich um native Win32-Portierungen vieler gängiger Unix-Dienstprogramme handelt. Es gibt einen touch-Befehl darin.

99
99
99
2011-09-09 14:18:55 +0000

Wenn Sie nur das Datum der letzten Änderung der Datei ändern wollen (was mein Fall war):

C:\> powershell (ls your-file-name-here).LastWriteTime = Get-Date
58
58
58
2011-02-16 15:21:00 +0000
type nul >>file & copy file +,,
  • Erstellt file, wenn es nicht existiert.
  • Lässt den Dateiinhalt in Ruhe.
  • Verwendet einfach cmd built-ins.
  • Sowohl letzter Zugriff als auch Erzeugungs mal aktualisiert.

UPDATE

Gah! Dies funktioniert nicht bei schreibgeschützten Dateien, wohingegen touch es tut. Ich schlage vor:

:touch
if not exist "%~1" type nul >>"%~1"& goto :eof
set _ATTRIBUTES=%~a1
if "%~a1"=="%_ATTRIBUTES:r=%" (copy "%~1"+,,) else attrib -r "%~1" & copy "%~1"+,, & attrib +r "%~1"
33
33
33
2009-11-25 10:51:32 +0000

@dash-tom-bang:

Hier ist Technets Erklärung des mysteriösen ‘+’ und der Kommas:

copy /b Quelle+,,

Die Kommas zeigen die Auslassung des Zielparameters an.

Der Befehl copy unterstützt das Zusammenführen mehrerer Dateien zu einer einzigen Zieldatei. Da ein leeres Ziel nicht mit einem Leerzeichen an der Eingabeaufforderung angegeben werden kann, können zwei Kommas verwendet werden, um dies zu kennzeichnen.

Und dies ist die Referenz des Kopierbefehls von Technet: http://technet.microsoft.com/en-us/library/bb490886.aspx

23
23
23
2009-07-22 05:59:04 +0000

Wenn Sie Lust haben, es selbst zu programmieren, bietet NET die Methoden File.SetLastAccessTime , File.SetCreationTime und File.SetLastWriteTime an.

21
21
21
2012-07-13 14:54:37 +0000

hier ist eine rekursive Version mit Powershell… dies ändert die letzte Änderungszeit für alle Dateien und Unterverzeichnisse und Dateien innerhalb der Unterverzeichnisse dieses Verzeichnisses

ps c:myDir> Get-ChildItem . * -recurse | ForEach-Object{$_.LastWriteTime = get-date}
15
15
15
2008-09-09 09:17:29 +0000

cygwin kommt mit touch. Ich weiß, dass Sie erwähnt haben, dass Sie kein ganzes Framework installieren wollen, aber cygwin ist ziemlich leichtgewichtig und kann vom dos-Kommandofenster aus aufgerufen werden, ohne dass die ganze Unix-ähnliche Kommandozeile eingeschaltet ist.

Sie können auch kontrollieren, welche Tools installiert werden sollen, so dass Sie einfach die Datei touch.exe installieren und den Rest des Frameworks stehen lassen können.

15
15
15
2008-09-09 09:18:05 +0000

Das Projekt GnuWin32 hat Windows-Portierungen der Gnu-Versionen der Unix-Befehlszeilen-Dienstprogramme.

Es kommt in einer Reihe von separaten Paketen und Sie können nur die Befehle installieren, die Sie benötigen, ohne weitere Abhängigkeiten. Für touch würden Sie das Paket CoreUtils benötigen.

15
15
15
2013-07-10 11:52:23 +0000

Ich habe dies versucht, um eine leere Datei in meinem Batch-Skript zu erstellen. Sie können dies verwenden:

ECHO text>file1.txt
14
14
14
2009-07-21 22:03:00 +0000

Hier ist eine einfache reg-Datei, die ich geschrieben habe Rechtsklick “touch” im Windows-Explorer hinzufügen . Es wäre auch einfach, es zu skripten, denn es ruft nur:

cmd.exe /c copy %1+nul %1 /by
13
13
13
2008-09-09 09:13:36 +0000

Native win32-Portierungen von vielen Unix-Befehlen , einschließlich touch.

Ich habe es schon einmal benutzt und es funktioniert gut - keine Installation, keine DLLs, etc

11
11
11
2008-09-09 09:19:08 +0000

Versuchen Sie diesen hier aus CodeProject .

  • Sie brauchen nicht zu installieren.
  • Wenn Sie möchten, können Sie sogar den Quelltext ändern.
9
9
9
2009-07-21 21:49:43 +0000

Sie können auch Cygwin installieren, das Ihnen neben Touch auch eine Vielzahl anderer *NIX-Befehle bietet.

5
5
5
2009-07-21 21:55:15 +0000

Es gibt Windows-Portierungen von vielen Unix-Dienstprogrammen. Schauen Sie sich die Projekte unxutils oder GnuWin32 an.

5
5
5
2011-02-28 18:10:16 +0000

Von einer ähnlichen Frage zum Stack-Überlauf.

Für die Aktualisierung von Zeitstempeln (ohne die andere Funktionalität von touch zu berücksichtigen) würde ich sagen:

copy /b filename.ext +,,
4
4
4
2009-07-21 21:45:42 +0000

Wie wäre es mit dem Codeprojekt “Touch for Windows”: http://www.codeproject.com/KB/applications/touch_win.aspx

bearbeiten; Gleiche Frage wie hier: https://stackoverflow.com/questions/51435/windows-version-of-the-unix-touch-command/51439

3
3
3
2012-09-28 14:14:07 +0000

Wenn Sie git für ein oder mehrere Projekte verwenden, hat das mingw-basierte git-bash für Windows den Befehl touch. Ich möchte @greg-hewgill dafür danken, dass Sie mich darauf hingewiesen haben, dass es ‘nix Dienstprogramme für Windows gibt, denn das hat mich auf die Idee gebracht, Touch in git-bash auszuprobieren.

3
3
3
2015-06-17 00:23:57 +0000

in PowerShell versuchen:

ni fileName.txt

NI ist ein Alias des Cmdlet “ New-Item ”.

2
2
2
2009-08-07 15:53:46 +0000

Ich habe einen schnellen Weg gefunden, es zu tun, wenn Sie vim installiert haben (nicht toll für große Dateien, öffnet die ganze Datei und schließt sie dann…) &00002 vim foobar.txt +wq!

Das “+” setzt das Argument, um die folgenden Befehle auszuführen. “wq!” ist “schreiben, beenden, erzwingen”. Dadurch wird die Datei geöffnet, eine Speicherung durchgeführt und unmittelbar danach geschlossen.

2
2
2
2012-11-11 01:27:44 +0000

Speichern Sie Folgendes als touch.bat in Ihrem Ordner %windir%\system32 oder fügen Sie den Ordner, in dem es gespeichert ist, zu Ihrer Umgebungsvariablen PATH hinzu:

@echo off
if %1.==. goto end
if not exist %1 goto end
copy /b %1 +,, > nul
echo %1 touched!
:end

Verwendungsbeispiel:

Referenz: Microsoft KB 69581

2
2
2
2018-02-18 21:50:03 +0000

Ich wollte die ‘Touch’-Funktion des Klonens / Duplizierens der Dateidaten aus einer anderen Datei, nativ, und von einer Batch-Datei aus nutzbar sein.

Also ‘Drag and Drop’ der Videodatei auf die Batch-Datei, FFMPEG läuft, dann wird ‘Date Created’ und ‘Date Modified’ von der Eingabedatei in die Ausgabedatei kopiert.

Das schien anfangs einfach, bis man feststellte, dass Batch-Dateien im Umgang mit Unicode-Dateinamen schrecklich sind, dass PowerShell inline mit Dateinamenssymbolen durcheinanderkommt und dass ein doppeltes Entkommen von ihnen ein Alptraum ist.

Meine Lösung war, den ‘touch’-Teil in ein separates PowerShell-Skript zu verwandeln, das ich ‘CLONE-FILE-DATE’ nannte. ps1’ und es enthält:

param
(
  [Parameter(Mandatory=$true)][string]$SourcePath,
  [Parameter(Mandatory=$true)][string]$TargetPath
)

(GI -LiteralPath $TargetPath).CreationTime = (GI -LiteralPath $SourcePath).CreationTime
(GI -LiteralPath $TargetPath).LastWriteTime = (GI -LiteralPath $SourcePath).LastWriteTime

Dann ist hier eine Beispielverwendung innerhalb meiner ‘CONVERT.BAT’-Batch-Datei:

%~dp0\ffmpeg -i "%~1" ACTION "%~1-output.mp4"

CHCP 65001 > nul && PowerShell -ExecutionPolicy ByPass -File "%~dp0\CLONE-FILE-DATE.PS1" "%~1" "%~1-output.mp4"

Ich denke, die PowerShell ist lesbar, also werde ich einfach die Batch-Sprache erklären:

%~dp0 ist das aktuelle Verzeichnis der Batch-Datei.

%~1 ist der Pfad der Datei, die ohne Anführungszeichen auf den Stapel abgelegt wurde.

CHCP 65001 > nul setzt Zeichen auf UTF-8 und verschluckt die Ausgabe.

-ExecutionPolicy ByPass ermöglicht es Ihnen, PowerShell auszuführen, ohne die globale Richtlinie ändern zu müssen, die dazu da ist, zu verhindern, dass Leute versehentlich Skripte ausführen.

1
1
1
2012-10-02 14:30:49 +0000

Dies steht in keinem Zusammenhang mit der ursprünglichen Frage, aber ich finde dies aufgrund der GUI unter Windows sehr nützlich.

Ich verwende das Dienstprogramm TouchPro, das eine GUI (in die Explorer-Shell eingebaut) bietet: http://www.jddesign.co.uk/products/touchpro/touchpro.htm

1
1
1
2017-05-10 17:46:52 +0000

Nun, wenn Sie den Befehl touch wirklich zur Verfügung haben wollen, können Sie diesen in eine Batch-Datei mit dem Namen touch.bat packen und ihn in C:\Windows:

TYPE NUL >>%1

einfügen.

1
1
1
2011-02-28 19:57:38 +0000

Die fünf oben genannten Alternativen sowie drei weitere, die hier nicht erwähnt werden, finden Sie unter SuperUser: “Windows Recursive Touch Command”

0
0
0
2019-04-11 17:41:41 +0000

Weil ich dies und eine Reihe anderer Dinge auch brauchte, habe ich eine eigene Shell-Erweiterung erstellt, die dies tut: AllSorts Ich habe auch diese offengelegt hier

0
0
0
2015-05-28 10:14:59 +0000

Die Unix-Leute haben das allgemeine Problem der Aktualisierung des Dateidatums jeder Datei mit dem touch-Befehl behoben. Für Windows ist jedoch manchmal eine einfachere Methode für Sonderfälle möglich.

Ich muß den Zeitstempel einer Anwendungsverknüpfung in Windows 8.1 aktualisieren, um Änderungen an der Hintergrundfarbe der Anwendungskachel sichtbar zu machen, siehe diese SO-Frage . Anstatt eines der obigen cleveren Werkzeuge zu implementieren, finde ich es einfacher, das Kommentarfeld der Verknüpfung zu bearbeiten. Die meisten Leute lassen es leer, aber natürlich ist ein nützlicher Kommentar schnell ausgedacht. Und wenn ein Kommentar vorhanden ist, schadet es nie, einen letzten Punkt hinzuzufügen oder zu entfernen.

0
0
0
2015-12-26 20:40:13 +0000

Ich weiß zu schätzen, dass dies eine alte Frage ist, ich habe gerade einen Touch auf meinem Windows 10-System entdeckt. Ich habe Git von hier (glaube ich) heruntergeladen und installiert und es sieht so aus, als ob touch und verschiedene andere Dienstprogramme im Ordner bin liegen.