要在Windows上更新文件的日期修改字段时使用什么?
- 命令通过C ++,.NET,C#,或Windows东西天然访问(Vista中优选)
- 工具/应用程序最好是免费的,并且如果可能的话,还应开源
编辑:已经有CheapScotsman 在此处指出的应用程序页面。
如果有人知道我如何通过C ++,C#,WSH或类似的方式做到这一点,那么我认为链接的问题涵盖了其他所有内容。
REM.>a
要在Windows上更新文件的日期修改字段时使用什么?
编辑:已经有CheapScotsman 在此处指出的应用程序页面。
如果有人知道我如何通过C ++,C#,WSH或类似的方式做到这一点,那么我认为链接的问题涵盖了其他所有内容。
REM.>a
Answers:
如果要使用Windows触摸文件的日期戳,请在命令提示符下使用以下命令:
copy /b filename.ext +,,
(filename.ext
文件名在哪里)。本+,,
是一个特殊的标志来copy
告诉它简单地更新文件上的日期/时间:
*更改文件的时间和日期
如果要为文件分配当前时间和日期而不修改文件,请使用以下语法:
copy /b Source+,,
逗号指示Destination参数的省略。
根据Lumi和Justin的评论进行编辑:将其放入批处理文件中,例如。touch.cmd
@COPY /B %1+,, %1
即使该文件不在当前目录中(在Windows 7上测试),该方法也有效。
type touch.bat
is @echo off
和下一行copy /b %1 +,,
-将其放入C:\bin
您自己的脚本中,或者将其放入您自己的脚本中,然后可以使用touch myfile.txt
。
copy /b Source+,, Source
--其中Source
包括文件的完整路径
我已经使用并推荐unxutils,它们是许多常见Unix实用程序的本机Win32端口。那里有一个touch
命令。
"test тест τεστ.txt"
touch
命令上下文中的含义。就像在nix环境中的其他任何事情一样,您可以执行此操作,也可以对其进行sudo,或者因为您没有特权而不能执行。
如果您只想更改文件的上次修改日期(我就是这种情况):
C:\> powershell (ls your-file-name-here).LastWriteTime = Get-Date
gci -recu -inc "*.*" | % { $_.LastWriteTime = Get-Date }
type nul >>file & copy file +,,
file
如果不存在则创建。cmd
内置的。更新
加!这不适用于只读文件,而适用于只读文件touch
。我建议:
: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"
filename +,,
语法。
@ dash-tom-bang:
这是Technet对神秘的“ +”和逗号的解释:
复制/ b Source +,
逗号指示Destination参数的省略。
copy命令支持将多个文件合并为一个目标文件。由于无法在命令提示符下使用空格字符指定空白目标,因此可以使用两个逗号来表示。
这是Technet的复制命令参考:http : //technet.microsoft.com/zh-cn/library/bb490886.aspx
如果你觉得自己的编码是,.NET提供的File.SetLastAccessTime
,File.SetCreationTime
和File.SetLastWriteTime
方法。
cygwin
附带touch
。我知道您提到过您不想安装整个框架,但是cygwin非常轻巧,可以在不打开整个类Unix命令行的情况下从dos命令窗口调用它。
您还可以控制要安装的工具,因此只需安装touch.exe
文件,然后剩下框架的其余部分。
这是我编写的用于在Windows资源管理器中添加右键单击“触摸”的简单regfile 。编写脚本也很容易,因为它只调用:
cmd.exe /c copy %1+nul %1 /by
copy nul some_file
创建一个空文件(这是我touch
最常使用的文件)。
从CodeProject尝试这个。
有关“ Windows触摸”的代码项目如何:http : //www.codeproject.com/KB/applications/touch_win.aspx
编辑; 与此处相同的问题:https : //stackoverflow.com/questions/51435/windows-version-of-the-unix-touch-command/51439
从网站:
Funduc Software Touch是一个免费的“触摸”实用程序,可让您更改一个或多个文件的时间/日期和/或属性标记。此外,FS Touch可以从现有文件时间中添加/减去指定的秒数。您可以通过“复杂文件掩码”指定要更改的文件和/或子目录。该程序可以从交互式或命令行运行。7.2版的新功能是一个命令行开关,用于更改文件修改的时间戳+/-指定的秒数。
FS Touch可在Windows XP,Vista,Windows 7和Windows 8上运行。
该内容可以保存到reg文件中。这将为所有具有“触摸文件”功能的文件(在Windows 7上测试)添加一个右键单击上下文菜单。将以下所有行复制到reg文件。运行文件并批准问题。右键单击任何文件(或多个文件)-“触摸文件”选项现在可用。
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\" +,,"
将以下内容保存为%windir%\ system32文件夹中的touch.bat或将其保存到的文件夹添加到PATH环境变量中:
@echo off
if %1.==. goto end
if not exist %1 goto end
copy /b %1 +,, > nul
echo %1 touched!
:end
用法示例:
touch *.cpp
touch somefile.c
我想要从本地克隆/复制另一个文件的文件日期的“触摸”功能,并且可以在批处理文件中使用。
因此,将视频文件“拖放”到批处理文件中,然后运行FFMPEG,然后将输入文件中的“创建日期”和“修改日期”复制到输出文件中。
乍一看,这似乎很简单,直到您发现批处理文件在处理Unicode文件名时非常糟糕,内联PowerShell将文件名符号弄乱了,对它们进行两次转义是一场噩梦。
我的解决方案是将“触摸”部分设为单独的PowerShell脚本,我将其称为“ CLONE-FILE-DATE.ps1”,其中包含:
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
然后这是我的“ 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"
我认为PowerShell是可读的,因此只解释一下批处理:
%〜dp0是批处理文件的当前目录。
%〜1是放置在没有引号的批处理中的文件的路径。
CHCP 65001> nul将字符设置为UTF-8并吞下输出。
-ExecutionPolicy ByPass允许您运行PowerShell,而无需修改全局策略,该策略可以防止人们意外运行脚本。
尝试
fsutil文件createnew new.txt 0
The FSUTIL utility requires that you have administrative privileges.
-它的行为不像touch
现有文件那样。
可以在SuperUser上找到上面提到的五个替代方法,以及此处未提及的三个替代方法:“ Windows递归触摸命令”
这与原始问题有点无关,但是由于GUI,我发现在Windows上这非常有用。
我正在使用提供GUI的TouchPro实用程序(内置在资源管理器外壳中):