2009-07-21 21:44:38 +0000 2009-07-21 21:44:38 +0000
179
179

Windows相当于Linux的命令 "touch"?

当你想在Windows上更新文件的日期修改字段时,你用什么来更新?

  1. 命令通过C++、.NET、C#或Windows原生的东西(最好是Vista)
  2. 2. 工具/应用程序最好是免费的,如果可能的话,也要开放源代码

编辑:已经有一个应用程序的页面了,正如CheapScotsman这里.

答案 (27)

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

我用过并推荐了unxutils,这是很多常见的Unix工具的原生Win32端口。里面有一个touch命令。

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

如果你只想改变文件的最后修改日期(我的情况是这样):

C:\> powershell (ls your-file-name-here).LastWriteTime = Get-Date
58
58
58
2011-02-16 15:21:00 +0000
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"
33
33
33
2009-11-25 10:51:32 +0000

由于在命令提示符中不能使用空格字符来指定空白的目标文件,所以可以用两个逗号来表示。

这就是Technet的复制命令参考。 http://technet.microsoft.com/en-us/library/bb490886.aspx

23
23
23
2009-07-22 05:59:04 +0000

如果你想自己编写,.NET提供了File.SetLastAccessTimeFile.SetCreationTimeFile.SetLastWriteTime方法。

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

这里是一个递归版本,使用 powershell…..这将改变所有文件和子目录,以及这个目录下的子目录中的文件的最后一次修改时间

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

cygwin自带touch。我知道你提到你不想安装整个框架,但cygwin是相当轻量级的,可以在dos命令窗口中调用,不需要打开整个类似unix的命令行。

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

GnuWin32项目有Gnu版本的Unix命令行实用程序的Windows端口。对于touch,你需要CoreUtils包。

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

我试着在我的批处理脚本中创建一个空文件。你可以用这个方法:

ECHO text>file1.txt
14
14
14
2009-07-21 22:03:00 +0000

下面是我写的一个简单的regfile,在Windows资源管理器中添加右键 “touch”。编写脚本也很容易,因为它只需要调用:

cmd.exe /c copy %1+nul %1 /by
```。
13
13
13
2008-09-09 09:13:36 +0000

许多unix命令的原生win32端口,包括touch。

我以前用过它,效果很好–不需要安装,不需要DLLs等。

11
11
11
2008-09-09 09:19:08 +0000

试试这个来自CodeProject

  • 不需要安装。
9
9
9
2009-07-21 21:49:43 +0000

你也可以安装Cygwin,它可以给你提供Touch以及其他大量的*NIX命令。

5
5
5
2009-07-21 21:55:15 +0000

有许多Unix实用程序的Windows端口。看看unxutilsGnuWin32项目。

5
5
5
2011-02-28 18:10:16 +0000

来自 Stack Overflow 上的类似问题

对于更新时间戳(忽略了touch的其他功能),我会选择:

copy /b filename.ext +,,
4
4
4
2009-07-21 21:45:42 +0000

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

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

如果你用git来做一个或多个项目,基于mingw的git-bash for Windows有touch命令。我要感谢 @greg-hewgill 给我指出了 “nix实用程序存在于windows中,因为是它让我有了在git-bash中尝试触摸的想法。

3
3
3
2015-06-17 00:23:57 +0000

在PowerShell中尝试:

ni fileName.txt

NINew-Item cmdlet的别名。

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

我找到了一个快速的方法,如果你安装了vim(对大文件不是很好,会打开整个文件,然后关闭它………..)

vim foobar.txt +wq!

“+"集参数运行以下命令。"wq!"是 "写,退出,强制"。这将打开文件,做一个保存,然后立即关闭文件。

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

将以下内容作为 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

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

因此,"拖放 “视频文件到批处理文件,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时不需要修改全局策略,有了这个策略,可以防止别人误操作脚本。

1
1
1
2012-10-02 14:30:49 +0000

这和原来的问题有点无关,但我发现这个在Windows上非常有用,因为GUI。

我使用的是TouchPro实用程序,它提供了一个GUI(内置到资源管理器外壳中): http://www.jddesign.co.uk/products/touchpro/touchpro.htm

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

如果你真的想让touch命令可用,你可以把这个放到一个叫touch.bat的批处理文件中,然后把它放到C:\Windows中:

TYPE NUL >>%1

足够简单。

1
1
1
2011-02-28 19:57:38 +0000

上面提到的五个替代方案,加上这里没有提到的三个,可以在SuperUser上找到:“Windows递归触摸命令”

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

因为我也需要这个和其他一些东西,所以我创建了我自己的shell扩展来做这个。 AllSorts 我还开源了这个 这里

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

Unix的人修复了用touch命令更新任何文件的文件日期的一般问题。不过,对于Windows来说,有时对于特殊情况,可以用更简单的方法。

我需要在Windows 8.1中更新一个应用程序的快捷方式的时间戳,以便对应用程序磁贴的背景颜色进行修改,可见这个SO问题。与其实现上面的巧妙工具之一,我觉得编辑快捷方式的注释字段更容易。大多数人都会把这个留为空,当然,很快就能构思出一个有用的注释。而且如果评论存在,添加或删除最后一个句号也不会有什么坏处。

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

我很感激这是个老问题,我刚刚在我的Windows 10系统上发现了touch。我从这里(我想是这样)下载并安装了Git,看起来touch和其他各种实用程序都在bin文件夹里。