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

Windows equivalent van het Linux commando 'touch'?

Wat gebruik je als je het date-gemodificeerde veld van een bestand op Windows wilt updaten?

  1. commando’s toegankelijk via C++, .NET, C#, of iets wat in Windows voorkomt (Vista bij voorkeur)
  2. 2. tools/applicaties bij voorkeur gratis, en indien mogelijk ook open source

Edit: er is al een pagina voor applicaties zoals aangegeven door CheapScotsman hier .

Als iemand weet hoe ik dit kan doen via C++, C#, WSH of iets dergelijks, goed en wel, anders zou ik denken dat al het andere in de gekoppelde vraag aan de orde komt.

Antwoorden (27)

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

Ik heb unxutils gebruikt en aanbevolen, die inheemse Win32-poorten van veel gemeenschappelijke Unix-nutsvoorzieningen zijn. Er zit een touch commando in.

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

Als u alleen de laatst gewijzigde datum van het bestand wilt wijzigen (wat mijn geval was):

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 +,,
  • Creëert file als het niet bestaat.
  • Laat de inhoud van het bestand met rust.
  • Gebruikt alleen de ingebouwde cmd.
  • Zowel laatste toegang als creation keer bijgewerkt.

UPDATE

Gah! Dit werkt niet op alleen-lezen bestanden, terwijl touch dit wel doet. Ik stel voor:

: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 is Technet’s uitleg van de mysterieuze ‘+’ en komma’s:

kopieer /b Bron+,,,

De komma’s geven het weglaten van de Destination parameter aan.

Het kopieer-commando ondersteunt het samenvoegen van meerdere bestanden in een enkel bestemmingsbestand. Aangezien een lege bestemming niet kan worden opgegeven met een spatie op de opdrachtprompt, kunnen twee komma’s worden gebruikt om dat aan te geven.

En dit is de kopieeropdracht van Technet: http://technet.microsoft.com/en-us/library/bb490886.aspx ](http://technet.microsoft.com/en-us/library/bb490886.aspx)

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

Als u zin hebt om het zelf te coderen, biedt .NET de methoden File.SetLastAccessTime , File.SetCreationTime en File.SetLastWriteTime .

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

hier is een recursieve versie die gebruik maakt van powershell… dit zal de laatst gewijzigde tijd voor alle bestanden en subdirectories, en bestanden binnen deze directory’s subdirectories

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

cygwin wordt geleverd met touch. Ik weet dat je zei dat je niet een heel raamwerk wilt installeren, maar cygwin is vrij licht, en kan aangeroepen worden vanuit het dos-commandovenster zonder dat de hele unix-achtige opdrachtregel aanstaat.

Je kunt ook bepalen welke gereedschappen je moet installeren, dus je kunt gewoon het touch.exe-bestand installeren, en de rest van het raamwerk laten staan.

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

Het GnuWin32 project heeft Windows-poorten van de Gnu-versies van de Unix-opdrachtprogramma’s.

Het wordt geleverd als een aantal afzonderlijke pakketten en u kunt alleen de commando’s installeren die u nodig hebt, zonder andere afhankelijkheden. Voor touch zou u het CoreUtils pakket nodig hebben.

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

Ik heb dit geprobeerd om een leeg bestand te maken in mijn batchscript. U kunt dit gebruiken:

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

Hier is een eenvoudig regulier bestand dat ik schreef aan voeg rechts-klik “touch” toe in Windows explorer . Het zou ook gemakkelijk zijn om het te scripten, omdat het gewoon roept:

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

Inheemse win32 poorten van veel unix opdrachten , inclusief touch.

Ik heb het eerder gebruikt en het werkt goed - geen installatie, geen DLL’s, enz.

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

Probeer deze van CodeProject .

  • U hoeft niet te installeren.
  • Als u wilt, kunt u zelfs de bron wijzigen.
9
9
9
2009-07-21 21:49:43 +0000

U kunt ook Cygwin installeren, waarmee u zowel Touch als een heleboel andere opdrachten krijgt.

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

Er zijn Windows poorten van veel Unix utilities. Kijk eens naar unxutils of GnuWin32 projecten.

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

Uit een gelijkaardige vraag op Stack Overflow.

Voor het updaten van tijdstempels (het negeren van de andere functionaliteit van touch), zou ik gaan voor:

copy /b filename.ext +,,
4
4
4
2009-07-21 21:45:42 +0000
3
3
3
2012-09-28 14:14:07 +0000

Als je git gebruikt voor een of meer projecten, dan heeft het op mingwgw gebaseerde git-bash voor Windows het touch commando. Ik wil @greg-hewgill bedanken voor het feit dat hij me erop heeft gewezen dat ‘nix utilities bestaan voor Windows, omdat het dat was wat me op het idee bracht om te proberen touch in git-bash.

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

in PowerShell proberen:

ni fileName.txt

NI is een alias van het Nieuw-Item cmdlet.

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

Ik heb een snelle manier gevonden om het te doen als je vim geïnstalleerd hebt (niet geweldig voor grote bestanden, zal het hele bestand openen en dan sluiten…) vim foobar.txt +wq!

De “+” stelt het argument in om de volgende commando’s uit te voeren. “wq!” is “write, quit, force”. Dit zal het bestand openen, een save doen en dan direct daarna sluiten.

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

Sla het volgende op als touch.bat in uw %windir%systeem32 map of voeg de map waarin het is opgeslagen toe aan uw PATH-omgevingsvariabele:

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

Gebruiksvoorbeeld:

touch *.cpp
touch somefile.c

Referentie: Microsoft KB 69581 (http://support.microsoft.com/kb/69581)

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

Ik wilde de ‘touch’ functie van het klonen / dupliceren van het bestand data uit een ander bestand, in eigen land, en bruikbaar zijn vanuit een batch-bestand.

Dus ‘drag and drop’ videobestand op batch-bestand, FFMPEG loopt, dan ‘Date Created’ en ‘Date Modified’ uit het invoerbestand wordt gekopieerd naar het uitvoerbestand.

Dit leek in eerste instantie eenvoudig totdat je merkt dat batch bestanden vreselijk slecht omgaan met unicode bestandsnamen, in-line PowerShell verknoeit met bestandsnaamsymbolen, en dubbel ontsnapt is een nachtmerrie.

Mijn oplossing was om het ‘touch’ gedeelte een apart PowerShell script te maken dat ik ‘CLONE-FILE-DATE’ noemde. ps1’ en het bevat:

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

dan is hier voorbeeldgebruik binnen mijn ‘CONVERT.BAT’ batch-bestand:

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

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

Ik denk dat de PowerShell leesbaar is, dus zal ik het batch-bestand maar uitleggen:

%~dp0 is de huidige directory van het batch-bestand.

%~1 is het pad van het bestand dat op de batch wordt gedropt zonder aanhalingstekens.

CHCP 65001 > nul stelt de karakters in op UTF-8 en slikt de uitvoer.

-ExecutionPolicy ByPass stelt u in staat om PowerShell uit te voeren zonder dat u het globale beleid hoeft aan te passen, dat er is om te voorkomen dat mensen per ongeluk scripts draaien.

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

Dit staat enigszins los van de oorspronkelijke vraag, maar ik vind dit erg handig op Windows vanwege de GUI.

Ik gebruik het TouchPro hulpprogramma dat een GUI (ingebouwd in de verkenningsshell) biedt: http://www.jddesign.co.uk/products/touchpro/touchpro.htm

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

Nou, als je echt het touch commando beschikbaar wilt hebben, kun je dit in een batchbestand met de naam touch.bat zetten en in C:\Windows plakken:

TYPE NUL >>%1

Simple enough.

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

De vijf bovengenoemde alternatieven, plus drie andere die hier niet worden genoemd, zijn te vinden op SuperUser: “Windows Recursive Touch Command”

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

Omdat ik dit ook nodig had en een aantal andere dingen, heb ik mijn eigen shell-extensie gemaakt die dit doet: Ik heb dit ook open source gemaakt hier

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

De Unix mensen hebben het algemene probleem van het updaten van de bestandsdatum van een bestand opgelost met het touch commando. Voor Windows is echter soms een eenvoudigere methode mogelijk voor speciale gevallen.

Ik moet de tijdstempel van een applicatiesnelkoppeling in Windows 8.1 bijwerken om wijzigingen in de achtergrondkleur van de applicatietegel zichtbaar te maken, zie deze SO-vraag . In plaats van een van de bovenstaande slimme tools te implementeren, vind ik het makkelijker om het commentaarveld van de snelkoppeling te bewerken. De meeste mensen laten dit leeg, maar een nuttige opmerking is natuurlijk snel bedacht. En als er een commentaar bestaat, kan het toevoegen of verwijderen van een laatste periode nooit kwaad.

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

Ik waardeer het dat dit een oude vraag is, ik ontdekte net de aanraking van mijn Windows 10 systeem. Ik heb Git gedownload en geïnstalleerd van hier (denk ik) en het lijkt erop dat touch en diverse andere hulpprogramma’s in de prullenbakmap zitten.