Windows相当于Linux的命令 "touch"?
当你想在Windows上更新文件的日期修改字段时,你用什么来更新?
- 命令通过C++、.NET、C#或Windows原生的东西(最好是Vista)
- 2. 工具/应用程序最好是免费的,如果可能的话,也要开放源代码
编辑:已经有一个应用程序的页面了,正如CheapScotsman这里.
当你想在Windows上更新文件的日期修改字段时,你用什么来更新?
编辑:已经有一个应用程序的页面了,正如CheapScotsman这里.
我用过并推荐了unxutils,这是很多常见的Unix工具的原生Win32端口。里面有一个touch
命令。
如果你只想改变文件的最后修改日期(我的情况是这样):
C:\> powershell (ls your-file-name-here).LastWriteTime = Get-Date
type nul >>file & copy file +,,
file
不存在,则创建cmd
。 touch
内置的文件内容。这对只读文件不起作用,而&007可以。我建议: :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"
由于在命令提示符中不能使用空格字符来指定空白的目标文件,所以可以用两个逗号来表示。
这就是Technet的复制命令参考。 http://technet.microsoft.com/en-us/library/bb490886.aspx
如果你想自己编写,.NET提供了File.SetLastAccessTime
、File.SetCreationTime
和File.SetLastWriteTime
方法。
下面是我写的一个简单的regfile,在Windows资源管理器中添加右键 “touch”。编写脚本也很容易,因为它只需要调用:
cmd.exe /c copy %1+nul %1 /by
```。
许多unix命令的原生win32端口,包括touch。
我以前用过它,效果很好–不需要安装,不需要DLLs等。
你也可以安装Cygwin,它可以给你提供Touch以及其他大量的*NIX命令。
来自 Stack Overflow 上的类似问题。
对于更新时间戳(忽略了touch
的其他功能),我会选择:
copy /b filename.ext +,,
codepro项目 “Touch for Windows "怎么样。http://www.codeproject.com/KB/applications/touch\win.aspx
编辑;同样的问题。 https://stackoverflow.com/questions/51435/windows-version-of-the-unix-touch-command/51439
将以下内容作为 touch.bat 保存在你的 %windir%/system32 文件夹中,或者将其保存的文件夹添加到你的 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
参考文献。 Microsoft KB 69581
因此,"拖放 “视频文件到批处理文件,FFMPEG运行,然后将输入文件中的 "Date Created "和 "Date Modified "复制到输出文件中。
这看起来很简单,直到你发现批处理文件在处理unicode文件名方面很糟糕,在线PowerShell会把文件名符号弄得一团糟,而且双重转义是个噩梦。 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时不需要修改全局策略,有了这个策略,可以防止别人误操作脚本。
这和原来的问题有点无关,但我发现这个在Windows上非常有用,因为GUI。
我使用的是TouchPro实用程序,它提供了一个GUI(内置到资源管理器外壳中): http://www.jddesign.co.uk/products/touchpro/touchpro.htm