O equivalente no Windows do comando do Linux 'touch'?

153

O que você usa quando deseja atualizar o campo de data de modificação de um arquivo no Windows?

  1. comandos acessíveis via C ++, .NET, C # ou algo nativo para Windows (Vista preferencialmente)
  2. ferramentas / aplicativos de preferência gratuitos e, se possível, código aberto também

Editar:  já existe uma página para aplicativos, como apontado por CheapScotsman aqui .

Se alguém souber como posso fazer isso via C ++, C #, WSH ou algo parecido, bom e bom, mais Eu acho que todo o resto é coberto na questão ligada.

    
por facepalmd 23.05.2017 / 14:41

30 respostas

335

Se você quiser tocar o carimbo de data de um arquivo usando o windows, use o seguinte comando no prompt de comando:

copy /b filename.ext +,,

(onde filename.ext é o nome do seu arquivo). O +,, é um sinalizador especial para copy , informando-o para simplesmente atualizar a data / hora no arquivo :

* Changing the time and date of a file

If you want to assign the current time and date to a file without modifying the file, use the following syntax:

copy /b Source+,,

The commas indicate the omission of the Destination parameter.

Edite com base nos comentários de Lumi e Justin: coloque isso em um arquivo de lote, por exemplo. touch.cmd

@COPY /B %1+,, %1

Isso funciona mesmo se o arquivo não estiver no diretório atual (testado no Windows 7).

    
por 29.05.2009 / 02:45
160

Eu usei e recomendo unxutils que são portas nativas do Win32 de vários utilitários comuns do Unix. Existe um comando touch lá.

    
por 09.09.2008 / 11:13
92

Se tudo o que você deseja é alterar a data da última modificação do arquivo (que foi o meu caso):

C:\> powershell  (ls your-file-name-here).LastWriteTime = Get-Date
    
por 09.09.2011 / 16:18
52
type nul >>file & copy file +,,
  • Cria file , se não existir.
  • Deixa o conteúdo do arquivo sozinho.
  • Apenas usa cmd internos.
  • Os tempos último acesso e criação foram atualizados.

UPDATE

Gah! Isso não funciona em arquivos somente leitura, enquanto touch faz. Eu sugiro:

: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"
    
por 16.02.2011 / 16:21
32

@ dash-tom-bang:

Aqui está a explicação da Technet sobre o misterioso '+' e as vírgulas:

copy /b Source+,,

The commas indicate the omission of the Destination parameter.

O comando copy suporta a mesclagem de vários arquivos em um único arquivo de destino. Como um destino em branco não pode ser especificado usando um caractere de espaço no prompt de comando, duas vírgulas podem ser usadas para denotar isso.

E esta é a referência de comando copy da Technet: link

    
por 25.11.2009 / 11:51
22

Se você quiser codificá-lo, o .NET oferece o File.SetLastAccessTime , File.SetCreationTime e File.SetLastWriteTime métodos.

    
por 22.07.2009 / 07:59
21

aqui está uma versão recursiva usando o powershell ... isto irá mudar o horário da última modificação para todos os arquivos e subdiretórios, e arquivos dentro dos subdiretórios deste diretório

ps c:myDir> Get-ChildItem . * -recurse | ForEach-Object{$_.LastWriteTime = get-date}
    
por 13.07.2012 / 16:54
15

Eu tentei isso para criar um arquivo vazio no meu script em lote. Você pode usar isto:

ECHO text>file1.txt
    
por 10.07.2013 / 13:52
14

O projeto GnuWin32 possui portas Windows das versões Gnu dos utilitários de linha de comando Unix.

Ele vem como um número de pacotes separados e você pode instalar apenas os comandos necessários sem outras dependências. Por touch você precisaria do pacote CoreUtils .

    
por 09.09.2008 / 11:18
13

cygwin vem com touch . Eu sei que você mencionou que você não quer instalar um framework inteiro, mas o cygwin é bem leve, e pode ser chamado a partir da janela de comando do DOS sem que toda a linha de comando parecida com um unix esteja ligada.

Você também pode controlar quais ferramentas instalar, portanto, basta instalar o arquivo touch.exe e deixar o resto da estrutura.

    
por 09.09.2008 / 11:17
13

Aqui está um arquivo de registro simples que eu escrevi para adicionar clique com o botão direito do mouse em "toque" no Windows Explorer . Seria fácil fazer o script também, já que apenas chama:

cmd.exe /c copy %1+nul %1 /by
    
por 22.07.2009 / 00:03
11

Portas win32 nativas de muitos comandos unix , incluindo o toque.

Eu já usei isso antes e funciona bem - sem instalação, sem DLLs, etc.

    
por 09.09.2008 / 11:13
10

Tente este em CodeProject .

  • Não é necessário instalar.
  • Se você quiser, pode até modificar a fonte.
por 09.09.2008 / 11:19
9

Você também pode instalar o Cygwin , que dá a você o Touch, bem como uma infinidade de outros comandos * do NIX.

    
por 21.07.2009 / 23:49
5

Existem portas Windows de muitos utilitários Unix. Dê uma olhada nos projetos unxutils ou GnuWin32 .

    
por 21.07.2009 / 23:55
5

De uma pergunta semelhante no Stack Overflow.

Para atualizar os timestamps (ignorando as outras funcionalidades de touch ), eu usaria:

copy /b filename.ext +,,
    
por 23.05.2017 / 13:33
4

Que tal o codeproject "Touch for Windows": link

editar; Mesma pergunta que aqui: link

    
por 23.05.2017 / 14:41
4

do site:

Funduc Software Touch is a free 'touch' utility that allows you to change the time/date &/or attribute stamps on one or more files. In addition, FS Touch can add/subtract a specified number of seconds from the existing file time. You can specify which file(s) and/or subdirectories to change via 'complex file masks'. The program can be run from interactively or the command line. New to version 7.2 is a command line switch to change file modified time stamp +/- the specified number of seconds.

FS Touch runs on Windows XP, Vista, Windows 7, & Windows 8.

    
por 31.12.2012 / 13:39
3

Se você estiver usando o git para um ou mais projetos, o git-bash baseado em mingw para Windows terá o comando touch . Quero agradecer a @greg-hewgill por me apontar que 'nix existem utilitários para windows, porque foi isso que me colocou na ideia de tentar tocar em git-bash.

    
por 28.09.2012 / 16:14
3

Este conteúdo pode ser salvo em um arquivo reg. Isso adicionará um menu de contexto do botão direito para todos os arquivos com a habilidade "Touch File" (testada no Windows 7). Copie all as seguintes linhas para o arquivo reg. Execute o arquivo e aprove a questão. Clique com o botão direito do mouse em qualquer arquivo (ou vários arquivos) - a opção "Touch File" já está disponível.

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\" +,,"
    
por 28.07.2013 / 23:18
3

no PowerShell, tente:

ni fileName.txt

NI é um alias do cmdlet New-Item .

    
por 17.06.2015 / 04:53
2

Salve o seguinte como touch.bat na pasta% windir% \ system32 ou adicione o pasta na qual ele é salvo em sua variável de ambiente PATH:

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

Uso da amostra:

touch *.cpp
touch somefile.c

Referência: Microsoft KB 69581

    
por 11.11.2012 / 02:27
2

Eu encontrei uma maneira rápida de fazer isso se você tiver o vim instalado (não ótimo para arquivos grandes, irá abrir o arquivo inteiro, em seguida, fechá-lo ...)

vim foobar.txt +wq!

O "+" define o argumento para executar os seguintes comandos. "wq!" é "escrever, sair, forçar". Isso abrirá o arquivo, salvará e depois o fechará imediatamente.

    
por 07.08.2009 / 17:53
1

Tente

arquivo fsutil criam nova new.txt 0

    
por 08.10.2010 / 09:46
1

As cinco alternativas mencionadas acima, mais outras três não mencionadas aqui, podem ser encontradas no SuperUser: " Comando de toque recursivo do Windows "

    
por 28.02.2011 / 20:57
1

Isso é um pouco não relacionado à pergunta original, mas acho isso muito útil no Windows devido à GUI.

Estou usando o utilitário TouchPro, que fornece uma GUI (criada no shell do explorer):

link

    
por 02.10.2012 / 16:30
1

Eu queria que o recurso 'touch' clonasse / duplicasse as datas do arquivo de outro arquivo, nativamente, e usasse um arquivo em lotes.

Então 'arraste e solte' o arquivo de vídeo para o arquivo de lote, o FFMPEG é executado, então 'Data de criação' e 'Data de modificação' do arquivo de entrada são copiados para o arquivo de saída.

Isso pareceu simples no começo até você achar que arquivos em lote são terríveis para lidar com nomes de arquivos unicode, o PowerShell in-line bagunça com símbolos de nomes de arquivos e o duplo escape deles é um pesadelo.

A minha solução foi tornar a parte 'touch' um script separado do PowerShell que chamei de 'CLONE-FILE-DATE.ps1' e contém:

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

Então aqui está o uso de exemplo dentro do meu arquivo 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"

Acho que o PowerShell é legível, por isso, basta explicar o que o lote fala:

% ~ dp0 é o diretório atual do arquivo de lote.

% ~ 1 é o caminho do arquivo inserido no lote sem aspas.

CHCP 65001 > nul define caracteres para UTF-8 e engole a saída.

-ExecutionPolicy ByPass permite que você execute o PowerShell sem precisar modificar a política global, que está lá para evitar que as pessoas executem scripts acidentalmente.

    
por 18.02.2018 / 23:08
0

As pessoas do Unix corrigiram o problema geral de atualizar a data do arquivo de qualquer arquivo com o comando touch . No entanto, para o Windows, às vezes, é possível um método mais simples para casos especiais.

Eu preciso atualizar o registro de data e hora de um atalho de aplicativo no Windows 8.1 para tornar as alterações na cor de plano de fundo do quadro do aplicativo visíveis, consulte esta pergunta SO . Em vez de implementar uma das ferramentas inteligentes acima, acho mais fácil editar o campo de comentários do atalho. A maioria das pessoas deixa isso vazio, mas é claro, um comentário útil é rapidamente concebido. E se houver um comentário, adicionar ou remover um período final nunca prejudicará.

    
por 23.05.2017 / 13:33
0

Eu aprecio que esta é uma pergunta antiga, acabei de descobrir o toque no meu sistema Windows 10. Eu baixei e instalei o Git de aqui (eu acho) e parece que o touch e vários outros utilitários estão na pasta bin .

    
por 26.12.2015 / 21:40
0

Bem, se você realmente quiser ter o comando touch disponível, você pode colocar isso em um arquivo de lote chamado touch.bat e colocá-lo em C:\Windows :

TYPE NUL >>%1

Simples o suficiente.

    
por 10.05.2017 / 19:46