it-swarm-eu.dev

Equivalente di Windows del comando 'touch' di Linux?

Che cosa usi quando vuoi aggiornare il campo modificato da data di un file su Windows?

  1. commands accessibile tramite C++, .NET, C #, o qualcosa di nativo per Windows (Vista preferibilmente)
  2. tools/applications preferibilmente gratuito, e se possibile open source pure

Modifica: c'è già una pagina per le applicazioni come sottolineato da CheapScotsman qui .

Se qualcuno sa come posso farlo via C++, C #, WSH o qualcosa di simile, bene e bene, altrimenti penserei che tutto il resto sia coperto nella domanda collegata.

167
facepalmd

Se si desidera toccare il timbro data di un file utilizzando Windows, utilizzare il seguente comando al prompt Prompt:

copy /b filename.ext +,,

(dove filename.ext è il nome del tuo file). Il +,, è un flag speciale per copy che dice semplicemente di aggiornare la data/ora sul file :

* Modifica dell'ora e della data di un file

Se si desidera assegnare l'ora e la data correnti a un file senza modificare il file, utilizzare la seguente sintassi:

copy /b Source+,,

Le virgole indicano l'omissione del parametro Destination.

Modifica basata sui commenti di Lumi e Justin: inserisci questo in un file batch, ad es. touch.cmd

@COPY /B %1+,, %1

Funziona anche se il file non si trova nella directory corrente (testato su Windows 7).

348
Gish Domains

Ho usato e consigliato unxutils che sono le porte native Win32 di molte utility Unix comuni. C'è un comando touch qui.

160
Greg Hewgill

Se tutto ciò che vuoi è cambiare l'ultima data di modifica del file (che era il mio caso):

C:\> powershell  (ls your-file-name-here).LastWriteTime = Get-Date
95
ThiagoAlves
type nul >>file & copy file +,,
  • Crea file se non esiste.
  • Lascia il contenuto del file da solo.
  • Utilizza solo cmd built-in.
  • Entrambi last-access e creation times updated.

AGGIORNARE

Gah! Questo non funziona sui file di sola lettura, mentre touch lo fa. Suggerisco:

: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"
58
bobbogo

@ Dash-tom-bang:

Ecco la spiegazione di Technet sul misterioso "+" e le virgole:

copia/b Fonte + ,

Le virgole indicano l'omissione del parametro Destination.

Il comando copia supporta l'unione di più file in un unico file di destinazione. Poiché una destinazione vuota non può essere specificata utilizzando un carattere di spazio al comando Prompt, è possibile utilizzare due virgole per denotarlo.

E questo è il riferimento al comando copia di Technet: http://technet.Microsoft.com/en-us/library/bb490886.aspx

32
Faredoon

Se hai voglia di codificarti da solo, .NET offre i metodi File.SetLastAccessTime , File.SetCreationTime e File.SetLastWriteTime .

23
Fredrik Mörk

ecco una versione ricorsiva che usa powershell ... questo cambierà l'ultima volta modificata per tutti i file e sottodirectory e i file all'interno delle sottodirectory di questa directory

ps c:myDir> Get-ChildItem . * -recurse | ForEach-Object{$_.LastWriteTime = get-date}
21
roger

Il progetto GnuWin32 ha porte Windows delle versioni Gnu delle utilità della riga di comando Unix.

Viene fornito come un numero di pacchetti separati ed è possibile installare solo i comandi necessari senza altre dipendenze. Per touch avresti bisogno del pacchetto CoreUtils .

15
Dave Webb

Ho provato questo per creare un file vuoto nel mio script batch. Puoi usare questo:

ECHO text>file1.txt
15
pkm

cygwin viene fornito con touch. So che hai detto che non vuoi installare un intero framework, ma cygwin è piuttosto leggero e può essere chiamato dalla finestra dei comandi dos senza l'intera linea di comando unix-like attivata.

Puoi anche controllare quali strumenti installare, in modo da poter semplicemente installare il file touch.exe e lasciare il resto del framework.

14
serg10

Ecco un semplice regfile che ho scritto su aggiungi il tasto destro del mouse su "touch" in Windows Explorer . Sarebbe facile anche copiarlo, dal momento che chiama semplicemente:

cmd.exe /c copy %1+nul %1 /by
14
Jon Galloway

Porte native win32 di molti comandi unix , incluso touch.

L'ho usato prima e funziona bene - nessuna installazione, nessuna DLL, ecc

12
Adam Davis

Prova questo da CodeProject .

  • Non è necessario installare.
  • Se vuoi, puoi persino modificare la fonte.
11
Prakash

Puoi anche installare Cygwin che ti dà Touch e una pletora di altri comandi * NIX.

9
jamesaharvey

Da una domanda simile su Stack Overflow.

Per aggiornare i timestamp (ignorando le altre funzionalità di touch), andrei con:

copy /b filename.ext +,,
5

Ci sono porte di Windows di molte utility Unix. Dai un'occhiata a unxutils o GnuWin32 projects.

5
VladV

dal sito web:

Funduc Software Touch è un'utilità gratuita 'touch' che consente di modificare l'ora/data e/o gli attributi di stampa su uno o più file. Inoltre, FS Touch può aggiungere/sottrarre un numero specificato di secondi dall'ora del file esistente. È possibile specificare i file e/o le sottodirectory da modificare tramite "maschere di file complesse". Il programma può essere eseguito interattivamente o dalla riga di comando. Nuovo alla versione 7.2 è un interruttore della riga di comando per modificare il timestamp del file modificato +/- il numero specificato di secondi.

FS Touch funziona su Windows XP, Vista, Windows 7 e Windows 8.

4
Marek

Questo contenuto può essere salvato in un file reg. Questo aggiungerà un menu di scelta rapida per tutti i file con l'abilità "Touch File" (testato su Windows 7). Copia tutto le seguenti righe per registrare il file. Esegui il file e approva la domanda. Fare clic destro su qualsiasi file (o più file) - L'opzione "Touch File" è ora disponibile.

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\Shell]

[HKEY_CLASSES_ROOT\*\Shell\Touch File]

[HKEY_CLASSES_ROOT\*\Shell\Touch File\command]
@="cmd /C copy /b \"%1\" +,,"
4
SharonBL
4
CheapScotsman

Se stai usando git per uno o più progetti, il git-bash basato su mingw per Windows ha il comando touch. Voglio ringraziare @ greg-hewgill per avermi fatto notare che esistono "utilità nix per Windows", perché è stato questo che mi ha dato l'idea di provare il tocco in git-bash.

3
Superole

in PowerShell prova:

ni fileName.txt

NI è un alias del New-Item cmdlet.

3
Monfa.red

Ho trovato un modo rapido per farlo se hai installato Vim (non è grandioso per i file di grandi dimensioni, aprirà l'intero file e poi lo chiuderà ...)

vim foobar.txt +wq!

Il "+" imposta l'argomento per eseguire i seguenti comandi. "WQ!" è "scrivi, esci, forza". Questo aprirà il file, eseguirà un salvataggio, quindi lo chiuderà subito dopo.

2
Jason

Salvare quanto segue come touch.bat nella cartella% windir%\system32 o aggiungere la cartella in cui è salvata nella variabile d'ambiente PATH:

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

Esempio di utilizzo:

touch *.cpp
touch somefile.c

Riferimento: Microsoft KB 69581

2
Tim Partridge

Volevo la funzionalità 'touch' di clonazione/duplicazione delle date dei file da un altro file, in modo nativo, e di essere utilizzabile da un file batch.

Quindi "trascina e rilascia" il file video sul file batch, FFMPEG viene eseguito, quindi "Data creazione" e "Data modifica" dal file di input vengono copiati nel file di output.

In un primo momento questo sembrava semplice fino a quando i file batch non sono terribili nella gestione dei nomi di file unicode, PowerShell in linea crea problemi con i simboli dei nomi di file e il doppio escape è un incubo.

La mia soluzione è stata rendere la parte "touch" uno script PowerShell separato che ho chiamato "CLONE-FILE-DATE.ps1" e che contiene:

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

Poi ecco l'esempio di utilizzo nel mio file batch "CONVERT.BAT":

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

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

Penso che il PowerShell sia leggibile, quindi spiegherò semplicemente il discorso del gruppo:

% ~ dp0 è la directory corrente del file batch.

% ~ 1 è il percorso del file rilasciato sul batch senza virgolette.

CHCP 65001> nul imposta i caratteri su UTF-8 e ingoia l'output.

-ExecutionPolicy ByPass consente di eseguire PowerShell senza la necessità di modificare la politica globale, che è lì per impedire agli utenti di eseguire accidentalmente script.

1
WhoIsRich

Provare

file fsutil createnew new.txt 0

1
Peter Hacke

Le cinque alternative di cui sopra, più altre tre non menzionate qui, possono essere trovate su SuperUser: "Windows Recursive Touch Command"

1
JdeBP

Questo è leggermente non correlato alla domanda originale, ma trovo questo molto utile su Windows a causa della GUI.

Sto usando l'utilità TouchPro che fornisce unGUI(incorporato in Explorer Shell):

http://www.jddesign.co.uk/products/touchpro/touchpro.htm

1
rustyx

Bene, se tu davvero vuoi avere il comando touch disponibile, puoi metterlo in un file batch chiamato touch.bat e incollarlo in C:\Windows:

TYPE NUL >>%1

Abbastanza semplice.

1
MD XF

Le persone Unix hanno risolto il problema generale di aggiornare la data del file di qualsiasi file con touch command. Tuttavia, per Windows, a volte è possibile un metodo più semplice per casi speciali.

Devo aggiornare il timestamp di un collegamento a un'applicazione in Windows 8.1 per rendere visibili le modifiche al colore di sfondo della piastrella dell'applicazione, vedere questo SO question . Piuttosto che implementare uno degli strumenti intelligenti di cui sopra, trovo più semplice modificare il campo di commento del collegamento. La maggior parte delle persone lascia questo vuoto, ma, naturalmente, un commento utile viene rapidamente concepito. E se esiste un commento, l'aggiunta o la rimozione di un periodo finale non danneggia mai.

0
Roland

Apprezzo che questa è una vecchia domanda, ho appena scoperto il tocco sul mio sistema Windows 10. Ho scaricato e installato Git da qui (credo) e sembra che il tocco e varie altre utilità siano nella cartella bin.

0
0909EM