Usuario del software
2009-07-21 21:44:38 +0000 2009-07-21 21:44:38 +0000
179

El equivalente en Windows del comando "tocar" de Linux?

¿Qué usas cuando quieres actualizar el campo de fecha modificada de un archivo en Windows?

  1. Comandos_ accesibles vía C++, .NET, C#, o algo nativo de Windows (Vista preferiblemente)
  2. herramientas/aplicaciones_ preferiblemente gratuitas, y si es posible de código abierto también

Editar: ya hay una página para aplicaciones como señaló CheapScotsman aquí .

Si alguien sabe cómo puedo hacer esto vía C++, C#, WSH o algo similar, bien y bueno, de lo contrario pensaría que todo lo demás está cubierto en la pregunta vinculada.

Respuestas [27]

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

He usado y recomendado unxutils que son puertos nativos Win32 de muchas utilidades comunes de Unix. Hay un comando touch ahí.

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

Si todo lo que quieres es cambiar la última fecha de modificación del archivo (que era mi caso):

C:\> powershell (ls your-file-name-here).LastWriteTime = Get-Date
99
58
2011-02-16 15:21:00 +0000
type nul >>file & copy file +,,
  • Crea file si no existe.
  • Deja sólo el contenido del archivo.
  • Sólo usa cmd incorporados.
  • Tanto el último acceso como la creación veces actualizada.

Actualización

Gah! Esto no funciona en archivos de sólo lectura, mientras que touch sí. Sugiero:

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

@dash-tom-bang:

Aquí está la explicación de Technet del misterioso '+' y las comas:

copiar /b Fuente+,,

Las comas indican la omisión del parámetro Destino.

El comando copiar soporta la fusión de múltiples archivos en un solo archivo de destino. Dado que no se puede especificar un destino en blanco utilizando un espacio en la línea de comandos, se pueden utilizar dos comas para denotarlo.

Y esta es la referencia del comando copy de Technet: http://technet.microsoft.com/en-us/library/bb490886.aspx

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

Aquí hay una versión recursiva usando powershell... esto cambiará el último tiempo modificado para todos los archivos y subdirectorios, y los archivos dentro de los subdirectorios de este directorio

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

cygwin viene con touch. Sé que mencionaste que no quieres instalar todo un framework, pero cygwin es bastante liviano, y puede ser llamado desde la ventana de comandos dos sin que la línea de comandos entera de unix esté encendida.

También puedes controlar qué herramientas instalar, así que podrías simplemente instalar el archivo touch.exe, y dejar el resto del framework.

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

El proyecto GnuWin32 tiene los puertos Windows de las versiones de Gnu de las utilidades de línea de comandos de Unix.

Viene como un número de paquetes separados y puedes instalar sólo los comandos que necesites sin otras dependencias. Para touch necesitarías el paquete CoreUtils .

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

Intenté esto para crear un archivo vacío en mi secuencia de comandos por lotes. Puedes usar esto:

ECHO text>file1.txt
15
11
2008-09-09 09:19:08 +0000

Prueba este de CodeProject .

  • No es necesario instalarlo.
  • Si quieres, puedes incluso modificar la fuente.
11
9
2009-07-21 21:49:43 +0000

También podrías instalar Cygwin que te da Touch así como una plétora de otros comandos *NIX.

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

Si estás usando git para uno o más proyectos, el mingw basado en git-bash para Windows tiene el comando touch. Quiero agradecer a @greg-hewgill por señalarme que 'nix utilidades existen para windows, porque fue lo que me dio la idea de intentar tocar en git-bash.

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

Encontré una forma rápida de hacerlo si tienes vim instalado (no es muy bueno para archivos grandes, abrirá todo el archivo y luego lo cerrará...)

vim foobar.txt +wq!

El "+" establece el argumento para ejecutar los siguientes comandos. "wq!" es "escribir, salir, forzar". Esto abrirá el archivo, lo guardará y lo cerrará inmediatamente después.

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

Guarda lo siguiente como touch.bat en tu carpeta %windir%\system32 o añade la carpeta en la que está guardado a tu variable de entorno PATH:

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

Muestra de uso:

touch *.cpp
touch somefile.c

Referencia: Microsoft KB 69581

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

Quería que la función "tocar" de clonar / duplicar el archivo data de otro archivo, de forma nativa, y ser utilizable desde un archivo por lotes.

Así que "arrastrar y soltar" el archivo de vídeo en el archivo por lotes, FFMPEG se ejecuta, luego "Fecha de creación" y "Fecha de modificación" del archivo de entrada se copia en el archivo de salida.

Esto parecía simple al principio hasta que encuentras que los archivos batch son terribles para manejar nombres de archivos unicode, PowerShell en línea se confunde con los símbolos de nombres de archivos, y escapar de ellos es una pesadilla.

Mi solución fue hacer de la parte "tocar" un script separado de PowerShell que llamé "CLONE-FILE-DATE". ps1' y 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

Entonces aquí está el ejemplo de uso dentro de mi archivo 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"

Creo que el PowerShell es legible, así que sólo explicaré el lenguaje batch:

%~dp0 es el directorio actual del archivo batch.

%~1 es la ruta del archivo lanzado en el lote sin comillas.

CHCP 65001 > nul establece los caracteres a UTF-8 y se traga la salida.

-ExecutionPolicy ByPass permite ejecutar PowerShell sin necesidad de modificar la política global, que está ahí para evitar que la gente ejecute accidentalmente los scripts.

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

Bueno, si realmente quieres tener el comando touch disponible, puedes ponerlo en un archivo por lotes llamado touch.bat y pegarlo en C:\Windows:

TYPE NUL >>%1

Suficientemente simple.

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

Porque necesitaba esto también y otras cosas, he creado mi propia extensión de la cáscara que hace esto: También he creado este código abierto.

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

La gente de Unix arregló el problema general de actualizar la fecha de cualquier archivo con el comando touch. Sin embargo, para Windows, a veces es posible un método más simple para casos especiales.

Necesito actualizar la marca de tiempo de un atajo de aplicación en Windows 8.1 para hacer visibles los cambios en el color de fondo de la Mosaico de Aplicaciones, ver esta pregunta SO . En lugar de implementar una de las herramientas inteligentes anteriores, me resulta más fácil editar el campo de comentarios del atajo. La mayoría de la gente deja esto vacío, pero por supuesto, un comentario útil se concibe rápidamente. Y si existe un comentario, añadir o eliminar un punto final nunca hace daño.

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

Aprecio que esta es una vieja pregunta, acabo de descubrir el toque en mi sistema Windows 10. He descargado e instalado Git desde aquí (creo) y parece que touch y varias otras utilidades están en la carpeta bin.

0