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

Equivalente ao Windows do comando 'touch' do Linux?

O que utiliza quando pretende actualizar o campo com data modificada de um ficheiro no Windows?

  1. commands acessível via C++, .NET, C#, ou algo nativo do Windows (Vista de preferência)
  2. tools/aplicações de preferência grátis, e se possível também código aberto

Editar: já existe uma página para aplicações como indicado pelo CheapScotsman aqui .

Se alguém souber como posso fazer isto via C++, C#, WSH ou algo semelhante, bem e bom, senão eu pensaria que tudo o resto está coberto na pergunta ligada.

Respostas (27)

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

Utilizei e recomendo unxutils que são portos nativos Win32 de muitas utilidades comuns Unix. Há um comando touch lá dentro.

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

Se tudo o que pretende é alterar a data da última modificação do ficheiro (que foi o meu 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 +,,
  • Cria file se não existir.
  • Deixa apenas o conteúdo do ficheiro.
  • Utiliza apenas cmd built-ins.
  • Actualiza tanto os tempos de last-access como de creation.

UPDATE

Gah! Isto não funciona em ficheiros só de leitura, enquanto que o touch funciona. 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"
33
33
33
2009-11-25 10:51:32 +0000

@dash-tom-bang:

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

copiar /b Fonte+,

As vírgulas indicam a omissão do parâmetro Destino.

O comando copiar suporta a fusão de vários ficheiros num único ficheiro de destino. Uma vez que um destino em branco não pode ser especificado usando um carácter de espaço no prompt de comando, podem ser usadas duas vírgulas para denotar isso.

E esta é a referência do comando de cópia da Technet: http://technet.microsoft.com/en-us/library/bb490886.aspx

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

Se lhe apetecer codificá-lo você mesmo, .NET oferece os métodos File.SetLastAccessTime , File.SetCreationTime e File.SetLastWriteTime .

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

aqui está uma versão recursiva usando powershell… isto irá alterar a última hora modificada para todos os ficheiros e subdirectórios, e ficheiros dentro dos subdirectórios deste directório

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

O cygwin vem com touch. Eu sei que mencionou que não quer instalar uma estrutura inteira, mas o cygwin é bastante leve, e pode ser chamado a partir da janela de comandos dos sem toda a linha de comandos tipo unix ligada.

Também pode controlar quais as ferramentas a instalar, por isso pode simplesmente instalar o ficheiro touch.exe, e deixar o resto da estrutura.

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

O projeto GnuWin32 tem 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 que você precisa, sem outras dependências. Para touch você precisaria do pacote CoreUtils .

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

Tentei isto para criar um ficheiro vazio no meu script de lote. Pode usar isto:

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

Aqui está um simples regfile que escrevi para adicionar “touch” com o botão direito do rato no Windows explorer . Seria fácil escrevê-lo também, uma vez que apenas chama:

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

Native win32 ports of many unix commands , including touch.

Já o usei antes e funciona bem - sem instalação, sem DLLs, etc

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

Experimente este de CodeProject .

  • Não precisa de instalar.
  • Se quiser, pode até modificar a fonte.
9
9
9
2009-07-21 21:49:43 +0000

Você também poderia instalar Cygwin que lhe dá o Touch assim como uma infinidade de outros comandos *NIX.

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

Existem portas Windows de muitos utilitários Unix. Veja os projectos unxutils ou GnuWin32 .

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

A partir de uma questão semelhante em Stack Overflow.

Para actualizar os carimbos temporais (ignorando a outra funcionalidade do touch), eu diria:

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

Que tal o codeprojecto “Touch for Windows”: http://www.codeproject.com/KB/applications/touch_win.aspx

edit; A mesma pergunta que aqui: https://stackoverflow.com/questions/51435/windows-version-of-the-unix-touch-command/51439

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

Se estiver a utilizar o git para um ou mais projectos, o git-bash para Windows baseado no mingw tem o comando touch. Quero agradecer a @greg-hewgill por me apontar que ‘nix utilities existem para windows, porque foi isso que me colocou na ideia de tentar tocar no git-bash.

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

em PowerShell try:

ni fileName.txt

NI é uma alcunha do New-Item cmdlet.

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

Encontrei uma forma rápida de o fazer se tiver o vim instalado (não é óptimo para ficheiros grandes, abre-se todo o ficheiro e depois fecha-se…)

vim foobar.txt +wq!

O “+” define o argumento para correr os seguintes comandos. “wq!” é “write, quit, force”. Isto irá abrir o ficheiro, fazer uma gravação, e depois fechá-lo imediatamente a seguir.

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

Guarde o seguinte como touch.bat na sua pasta %windir%\system32 ou adicione a pasta na qual está guardado à 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

Utilização da amostra:

touch *.cpp
touch somefile.c

Referência: Microsoft KB 69581

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

Eu queria a funcionalidade ‘touch’ de clonar / duplicar as datas do ficheiro a partir de outro ficheiro, nativamente, e ser utilizável a partir de um ficheiro batch.

Então ‘drag and drop’ video file on to batch file, FFMPEG runs, depois ‘Date Created’ e ‘Date Modified’ do ficheiro de entrada é copiado para o ficheiro de saída.

Isto pareceu simples no início até achar que os ficheiros em lote são terríveis a lidar com nomes de ficheiros unicode, o PowerShell em linha mexe com os símbolos dos nomes dos ficheiros e escapar-lhes duas vezes é um pesadelo.

A minha solução foi fazer da parte ‘touch’ um script PowerShell separado que eu chamei ‘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 exemplo de utilização dentro do meu ficheiro de lote ‘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 que o PowerShell é legível, por isso vou apenas explicar o lote fala:

%~dp0 é o directório actual do ficheiro de lote.

%~1* é o caminho do ficheiro largado no lote sem aspas.

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

-ExecutionPolicy ByPass permite correr o PowerShell sem necessidade de modificar a política global, que existe para evitar que as pessoas corram scripts acidentalmente.

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

Isto não tem nada a ver com a pergunta original, mas acho isto muito útil no Windows devido ao GUI.

Estou a utilizar o utilitário TouchPro que fornece um GUI (integrado na shell do explorador): http://www.jddesign.co.uk/products/touchpro/touchpro.htm

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

Bem, se você realmente quer ter o comando touch disponível, pode colocá-lo num ficheiro batch chamado touch.bat e colá-lo em C:\Windows:

TYPE NUL >>%1

Suficientemente simples.

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

As cinco alternativas mencionadas acima, mais três não mencionadas aqui, podem ser encontradas no SuperUser: “Windows Recursive Touch Command”

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

Porque eu também precisava disto e de uma série de outras coisas, criei a minha própria extensão de concha que faz isto: AllSorts Eu também tenho esta aqui

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

O pessoal do Unix resolveu o problema geral de actualizar a data de qualquer ficheiro com o comando touch. No entanto, para o Windows, por vezes é possível um método mais simples para casos especiais.

Preciso de actualizar o timestamp de um atalho da aplicação no Windows 8.1 de forma a tornar visíveis as alterações à cor de fundo do Tile da Aplicação, ver esta questão de 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 este campo vazio, mas é claro, um comentário útil é rapidamente concebido. E se existir um comentário, adicionar ou remover um período final nunca prejudica.

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

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