it-swarm.dev

¿Windows equivalente del comando de Linux 'tocar'?

¿Qué usa cuando desea actualizar el campo de fecha modificada de un archivo en Windows?

  1. comandos accesibles a través de C++, .NET, C #, o algo nativo de Windows (preferiblemente de Vista)
  2. herramientas/aplicaciones preferiblemente gratis, y si es posible también código abierto

Edición: ya existe una página para aplicaciones, como lo señala CheapScotsman aquí .

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

167
facepalmd

Si desea tocar la marca de fecha de un archivo utilizando Windows, use el siguiente comando en el símbolo del sistema:

copy /b filename.ext +,,

(donde filename.ext es el nombre de su archivo). El +,, es un indicador especial para copy que le indica que simplemente actualice la fecha/hora en el archivo :

* Cambio de la hora y fecha de un archivo.

Si desea asignar la hora y fecha actuales a un archivo sin modificar el archivo, use la siguiente sintaxis:

copy /b Source+,,

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

Edición basada en los comentarios de Lumi y Justin: poner esto en un archivo por lotes, por ejemplo. touch.cmd

@COPY /B %1+,, %1

Esto funciona incluso si el archivo no está en el directorio actual (probado en Windows 7).

348
Gish Domains

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

160
Greg Hewgill

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

C:\> powershell  (ls your-file-name-here).LastWriteTime = Get-Date
95
ThiagoAlves
type nul >>file & copy file +,,
  • Crea file si no existe.
  • Deja el contenido del archivo solo.
  • Solo usa cmd incorporados.
  • Ambos último acceso y creación veces actualizado.

ACTUALIZACIÓN

Gah! Esto no funciona en archivos de solo lectura, mientras que touch sí lo hace. Yo 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
bobbogo

@ dash-tom-bang:

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

copiar/b Fuente + ,

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

El comando de copia admite la combinación de varios archivos en un solo archivo de destino. Dado que no se puede especificar un destino en blanco usando un carácter de espacio en el símbolo del sistema, se pueden usar dos comas para denotar eso.

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

32
Faredoon

Si tiene ganas de codificarlo usted mismo, .NET ofrece los métodos File.SetLastAccessTime , File.SetCreationTime y File.SetLastWriteTime .

23
Fredrik Mörk

aquí hay una versión recursiva que usa powershell ... esto cambiará la última hora de modificación de 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
roger

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

Viene como una serie de paquetes separados y puede instalar solo los comandos que necesita sin otras dependencias. Para touch necesitarías el paquete CoreUtils .

15
Dave Webb

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

ECHO text>file1.txt
15
pkm

cygwin viene con touch. Sé que mencionó que no desea instalar un marco completo, pero cygwin es bastante liviano, y se puede llamar desde la ventana de comandos dos sin que esté activada toda la línea de comandos tipo Unix.

También puede controlar qué herramientas instalar, por lo que simplemente puede instalar el archivo touch.exe y dejar el resto del marco.

14
serg10

Aquí hay un archivo de registro simple que escribí para agregar clic derecho "tocar" en el Explorador de Windows . También sería fácil escribirlo, ya que simplemente llama:

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

Puertos win32 nativos de muchos comandos de Unix , incluido el toque.

Lo he usado antes y funciona bien, sin instalación, sin DLL, etc.

12
Adam Davis

Prueba este desde CodeProject .

  • No es necesario instalar.
  • Si lo desea, puede incluso modificar la fuente.
11
Prakash

También puedes instalar Cygwin que te da tanto el toque como una gran cantidad de otros comandos * NIX.

9
jamesaharvey

De una pregunta similar en desbordamiento de pila.

Para actualizar las marcas de tiempo (ignorando la otra funcionalidad de touch), me gustaría ir con:

copy /b filename.ext +,,
5
Dennis Williamson

Hay puertos de Windows de muchas utilidades Unix. Echa un vistazo a unxutils o GnuWin32 projects.

5
VladV

desde el sitio web:

Funduc Software Touch es una utilidad gratuita de 'toque' que le permite cambiar la fecha/hora y/o las marcas de atributos en uno o más archivos. Además, FS Touch puede agregar/restar un número específico de segundos del tiempo de archivo existente. Puede especificar qué archivos o subdirectorios cambiar a través de "máscaras de archivos complejos". El programa se puede ejecutar de forma interactiva o desde la línea de comandos. Nuevo en la versión 7.2 es un interruptor de línea de comando para cambiar la marca de tiempo modificada del archivo +/- el número especificado de segundos.

FS Touch se ejecuta en Windows XP, Vista, Windows 7 y Windows 8.

4
Marek

Este contenido se puede guardar en un archivo de registro. Esto agregará un menú contextual con el botón derecho para todos los archivos con la capacidad "Touch File" (probado en Windows 7). Copie todo las siguientes líneas al archivo reg. Ejecuta el archivo y aprueba la pregunta. Haga clic con el botón derecho en cualquier archivo (o varios archivos): la opción "Toque archivo" ya está disponible.

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

Si está utilizando git para uno o más proyectos, el código git-bash para Windows basado en mingw tiene el comando touch. Quiero agradecer a @ greg-hewgill por señalarme que existen 'nix utilities' para windows, porque fue eso lo que me dio la idea de probar el toque en git-bash.

3
Superole

en PowerShell intente:

ni fileName.txt

NI es un alias del New-Item cmdlet.

3
Monfa.red

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

vim foobar.txt +wq!

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

2
Jason

Guarde lo siguiente como touch.bat en su carpeta% windir%\system32 o agregue la carpeta en la que está guardada en su variable de entorno PATH:

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

Uso de la muestra:

touch *.cpp
touch somefile.c

Referencia: Microsoft KB 69581

2
Tim Partridge

Quería la función 'táctil' de clonar/duplicar las fechas de los archivos de otro archivo, de forma nativa, y ser utilizable desde un archivo por lotes.

Entonces, el archivo de video 'arrastrar y soltar' en un archivo por lotes, FFMPEG se ejecuta, luego 'Fecha de creación' y 'Fecha de modificación' del archivo de entrada se copian en el archivo de salida.

Esto pareció simple al principio, hasta que los archivos por lotes son terribles al manejar nombres de archivos Unicode, PowerShell en línea se mete con los símbolos de los nombres de archivos y el doble de escape es una pesadilla.

Mi solución fue hacer que la parte 'táctil' fuera un script PowerShell separado 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 uso de ejemplo dentro de mi archivo por lotes '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 solo explicaré el discurso del lote:

% ~ dp0 es el directorio actual del archivo por lotes.

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

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

-ExecutionPolicy ByPass le permite ejecutar PowerShell sin necesidad de modificar la política global, que está ahí para evitar que las personas ejecuten scripts accidentalmente.

1
WhoIsRich

Tratar

archivo fsutil createnew new.txt 0

1
Peter Hacke

Las cinco alternativas mencionadas anteriormente, más otras tres que no se mencionan aquí, se pueden encontrar en el Superusuario: "Comando táctil de Windows recursivo"

1
JdeBP

Esto no tiene nada que ver con la pregunta original, pero me parece muy útil en Windows debido a la GUI.

Estoy usando la utilidad TouchPro que proporciona unaGUI(se construye en el shell de Explorer):

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

1
rustyx

Bueno, si realmente quiere tener el comando touch disponible, puede poner esto en un archivo por lotes llamado touch.bat y pegarlo en C:\Windows:

TYPE NUL >>%1

Suficientemente simple.

1
MD XF

La gente de Unix solucionó el problema general de actualizar la fecha del archivo 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 acceso directo de aplicación en Windows 8.1 para poder hacer cambios en el color de fondo del mosaico de la aplicación, ver esta SO pregunta . En lugar de implementar una de las herramientas inteligentes de arriba, me resulta más fácil editar el campo de comentarios del acceso directo. 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, agregar o eliminar un período final nunca hace daño.

0
Roland

Aprecio que esta es una pregunta antigua, acabo de descubrir el toque en mi sistema Windows 10. Descargué e instalé Git desde aquí (creo) y parece que el toque y otras utilidades están en la carpeta bin.

0
0909EM

Como también necesitaba esto y muchas otras cosas, he creado mi propia extensión de Shell que hace esto: AllSorts También he abierto esta fuente aquí

0
Stijn Sanders