¿Qué usa cuando desea actualizar el campo de fecha modificada de un archivo en Windows?
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.
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).
He usado y recomiendo unxutils que son puertos Win32 nativos de muchas utilidades comunes de Unix. Hay un comando touch
allí.
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
type nul >>file & copy file +,,
file
si no existe.cmd
incorporados.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"
@ 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
Si tiene ganas de codificarlo usted mismo, .NET ofrece los métodos File.SetLastAccessTime
, File.SetCreationTime
y File.SetLastWriteTime
.
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}
Intenté esto para crear un archivo vacío en mi script por lotes. Puedes usar esto:
ECHO text>file1.txt
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.
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
Puertos win32 nativos de muchos comandos de Unix , incluido el toque.
Lo he usado antes y funciona bien, sin instalación, sin DLL, etc.
Prueba este desde CodeProject .
También puedes instalar Cygwin que te da tanto el toque como una gran cantidad de otros comandos * NIX.
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 +,,
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.
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\" +,,"
¿Qué hay de codeproject "Touch para Windows": http://www.codeproject.com/KB/applications/touch_win.aspx
editar; La misma pregunta que aquí: https://stackoverflow.com/questions/51435/windows-version-of-the-unix-touch-command/51439
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.
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.
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
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.
Tratar
archivo fsutil createnew new.txt 0
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"
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):
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.
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.
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.