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

Windows equivalente al comando Linux 'touch'?

Cosa si usa quando si vuole aggiornare il campo data-modificato di un file su Windows?

  1. 1. comandi accessibili tramite C+++, .NET, C#, o qualcosa di nativo di Windows (preferibilmente Vista)
  2. strumenti/applicazioni preferibilmente gratuiti, e se possibile anche open source

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

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

Risposte (27)

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

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

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

Se tutto quello che volete è cambiare l'ultima data modificata del file (che era il mio caso):

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 +,,
  • Crea file se non esiste.
  • Lascia solo il contenuto del file.
  • Utilizza solo cmd integrato.
  • Sia ultimo accesso che creazione tempi aggiornati.

UPDATE

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"
33
33
33
2009-11-25 10:51:32 +0000

@dash-tom-bang:

Ecco la spiegazione di Technet del misterioso ‘+’ e le virgole:

copia /b Source+,,

Le virgole indicano l'omissione del parametro Destinazione.

Il comando copia supporta la fusione di più file in un unico file di destinazione. Poiché una destinazione vuota non può essere specificata usando un carattere di spazio al prompt dei comandi, si possono usare due virgole per indicarlo.

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

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

Se avete voglia di codificarlo voi stessi, .NET offre i metodi File.SetLastAccessTime , File.SetCreationTime e File.SetLastWriteTime .

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

ecco una versione ricorsiva che utilizza powershell… questo cambierà l'ultimo tempo modificato per tutti i file e le sottodirectory, e i file all'interno delle sottodirectory di questa directory

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

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

Si può anche controllare quali strumenti installare, quindi si potrebbe semplicemente installare il file touch.exe, e lasciare il resto del framework.

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

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

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

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

Ho provato a creare un file vuoto nel mio batch script. È possibile utilizzare questo:

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

Ecco un semplice regfile che ho scritto per aggiungere il tasto destro del mouse “touch” in Windows explorer . Sarebbe facile anche scriverlo, dato che chiama solo:

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

Porte native win32 di molti comandi unix , incluso il touch.

L'ho già usato in precedenza e funziona bene - nessuna installazione, nessuna DLL, ecc.

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

Prova questo da CodeProject .

  • Non c'è bisogno di installare.
  • Se vuoi, puoi anche modificare il sorgente.
9
9
9
2009-07-21 21:49:43 +0000

Si può anche installare Cygwin che vi dà il Touch così come una pletora di altri comandi *NIX.

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

Ci sono porte Windows di molte utility Unix. Date un'occhiata ai progetti unxutils o GnuWin32 .

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

Da una domanda simile su Stack Overflow.

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

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

Che ne dite di codeproject “Touch for Windows”: http://www.codeproject.com/KB/applications/touch_win.aspx

edit; Stessa domanda come qui: https://stackoverflow.com/questions/51435/windows-version-of-the-unix-touch-command/51439

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

Se si utilizza git per uno o più progetti, il comando git-bash basato su mingw per Windows ha il comando touch. Voglio ringraziare @greg-hewgill per avermi fatto notare che esistono ‘nix utilities per windows, perché è stato quello che mi ha messo in testa l'idea di provare il touch in git-bash.

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

in PowerShell try:

ni fileName.txt
``` &001 



`NI` è uno pseudonimo del [ New-Item ](https://technet.microsoft.com/en-us/library/hh849795.aspx) cmdlet.
2
2
2
2009-08-07 15:53:46 +0000

Ho trovato un modo veloce per farlo se avete installato vim (non è ottimo per i file grandi, aprirà l'intero file e poi lo chiuderà…)

vim foobar.txt +wq!
``` &001 


Il "+" imposta l'argomento per eseguire i seguenti comandi. "wq!" è "scrivi, esci, forza". Questo aprirà il file, farà un salvataggio, poi lo chiuderà immediatamente dopo.
2
2
2
2012-11-11 01:27:44 +0000

Salvare quanto segue come touch.bat nella cartella %windir%\system32 o aggiungere la cartella in cui è salvato 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
``` ```
touch *.cpp
touch somefile.c

Utilizzo del campione:

&001 &001

Riferimento: Microsoft KB 69581

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

Volevo che la funzione ‘touch’ di clonare / duplicare le date dei file da un altro file, in modo nativo, ed essere utilizzabile da un file batch.

Quindi il file video ‘trascina e rilascia’ su un file batch, FFMPEG viene eseguito, poi ‘Data creata’ e ‘Data modificata’ dal file di input viene copiato nel file di output.

Questo sembrava semplice all'inizio, finché non si è scoperto che i file batch sono terribili nel gestire i nomi dei file unicode, PowerShell in linea fa casino con i simboli dei nomi dei file, e la doppia fuga è un incubo.

La mia soluzione è stata quella di rendere la parte ‘touch’ uno script PowerShell separato che ho chiamato ‘CLONE-FILE-DATA’. ps1" e 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
``` ```
%~dp0\ffmpeg -i "%~1" ACTION "%~1-output.mp4"

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

Allora ecco un esempio di utilizzo all'interno del mio file batch ‘CONVERT.BAT’:

&001 &001

Penso che PowerShell sia leggibile, quindi spiegherà solo il discorso del batch:

%~dp0 è la directory corrente del file batch.

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

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

-ExecutionPolicy ByPass consente di eseguire PowerShell senza dover modificare la politica globale, che è lì per evitare che le persone eseguano accidentalmente gli script.

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

Questo è leggermente estraneo alla domanda originale, ma lo trovo molto utile su Windows grazie all'interfaccia grafica.

Sto usando l'utilità TouchPro che fornisce un GUI (integrato nel guscio dell'esploratore): http://www.jddesign.co.uk/products/touchpro/touchpro.htm

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

Bene, se volete davvero avere il comando touch disponibile, potete metterlo in un file batch chiamato touch.bat e inserirlo in C:\Windows:

TYPE NUL >>%1
``` &001 


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

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

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

Poiché avevo bisogno anche di questo e di molte altre cose, ho creato la mia estensione di conchiglia che fa questo: AllSorts Ho anche aperto questo qui

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

Il personale di Unix ha risolto il problema generale di aggiornare la data del file di qualsiasi file con il comando touch. Tuttavia, per Windows, a volte è possibile un metodo più semplice per casi particolari.

Ho bisogno di aggiornare il timestamp di una scorciatoia dell'applicazione in Windows 8.1 per rendere visibili le modifiche al colore di sfondo dell'Application Tile, vedi questa domanda SO . Piuttosto che implementare uno degli strumenti intelligenti di cui sopra, trovo più facile modificare il campo di commento della scorciatoia. La maggior parte delle persone lascia questo vuoto, ma naturalmente, un commento utile viene rapidamente concepito. E se un commento esiste, aggiungere o rimuovere un periodo finale non nuoce mai.

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

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