題 Windows相當於Linux命令'touch'?


如果要在Windows上更新文件的日期修改字段,您會使用什麼?

  1. 命令 可通過C ++ ,. NET,C#或Windows本機(最好是Vista)訪問
  2. 工具/應用 優選地是免費的,並且如果可能的話也是開源的

編輯:  CheapScotsman指出,已有一個應用程序頁面 這裡

如果有人知道如何通過C ++,C#來做到這一點, WSH 或類似的,好的和好的,否則我會認為鏈接問題涵蓋了其他一切。


153
2018-05-29 00:45


起源


上面提到的四個替代方案,加上這裡沒有提到的四個替代方案,可以在類似問題的答案中找到: “Windows遞歸觸摸命令” - JdeBP
stackoverflow.com/questions/210201/...    提到負載,包括 REM.>a - barlop


答案:


如果要使用Windows觸摸文件的日期戳,請在命令提示符處使用以下命令:

copy /b filename.ext +,,

(哪裡 filename.ext 是你的文件名稱)。該 +,, 是一個特殊的旗幟 copy 簡單地告訴它 更新文件上的日期/時間

*更改文件的時間和日期

如果要在不修改文件的情況下將當前時間和日期分配給文件,請使用以下語法:

copy /b Source+,,

逗號表示省略了Destination參數。

根據Lumi和Justin的評論進行編輯: 把它放在批處理文件中,例如。 touch.cmd

@COPY /B %1+,, %1

即使文件不在當前目錄中(在Windows 7上測試),這也可以工作。


335
2017-09-09 09:13



這是做什麼的?它在哪裡記錄? (Google未能將“+ ,,”編入索引,而MS網站並沒有引導我朝著正確的方向前進,因為搜索“副本”變得很有用。)我的意思是,它很有效,我會接受理所當然,但我很好奇。 - dash-tom-bang
文檔 copy: technet.microsoft.com/en-us/library/bb490886.aspx - Joseph Hansen
type touch.bat 是 @echo off 和下一行 copy /b %1 +,, - 把它放入 C:\bin 或者你有什麼用於自己的腳本,然後就可以使用它了 touch myfile.txt。 - Lumi
在Win7中,如果您不在包含該文件的文件夾中,則無法使用。它將在當前工作目錄中創建一個副本。
如果需要在遠程文件夾(UNC路徑)中執行此操作 - 您還必須為複制命令指定目標 - copy /b Source+,, Source  - 在哪裡 Source 包括文件的完整路徑 - Justin


我用過並推薦過 unxutils 這是許多常見Unix實用程序的本機Win32端口。有一個 touch 命令在那裡。


160
2017-09-09 14:18



對於幾乎每個unix-to-windows端口,這都無法使用編碼集之外的文件名中的unicode字符作為非unicode程序的默認值。測試文件名將使每個這樣的工具絆倒: "test тест τεστ.txt" - RomanSt
gnuwin32有它。但實際上,gnuwin32的unicode字符也失敗了。 - barlop
2017年更新在Windows 10中,我們可以使用Linux子系統來安裝bash。不需要cygwin,MinGW,unxutils或任何其他部分unix到Windows端口。 docs.microsoft.com/en-us/windows/wsl/install-win10 - Davos


如果你想要的只是改變文件的最後修改日期(這是我的情況):

C:\> powershell  (ls your-file-name-here).LastWriteTime = Get-Date

92
2018-02-16 15:21



PowerShell FTW。我的意思是,說真的,unix很酷,但PS更酷。 - matt
您也可以更新多個文件/文件夾的上次寫入時間
這只適用於一個文件。對於多個文件:ls * | ForEach-Object {$ _.LastWriteTime = Get-Date} - Eli Algranti
如果你想以遞歸的方式做到這一點,那麼效果非常好:gci -recu -inc“。“|%{$ _。LastWriteTime = Get-Date} - BrainSlugs83
@ BrainSlugs83:使用反引號`代碼: gci -recu -inc "*.*" | % { $_.LastWriteTime = Get-Date } - alldayremix


type nul >>file & copy file +,,
  • 創建 file 如果它不存在。
  • 僅留下文件內容。
  • 只是使用 cmd 內置插件。
  • 最後訪問 和 創建 次更新。

UPDATE

爾加!這不適用於只讀文件,而 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"

52
2017-11-25 10:51



很遺憾,副本不能像xcopy那樣忽略+ r屬性。或者,遺憾的是xcopy不支持怪異 filename +,, 句法。 - Abel
不幸的是,這不起作用(至少在Windows 7中沒有)。如果文件未被實際修改(即,沒有要重定向的數據),則命令解釋器似乎不更新重定向的目的地的時間戳。 - Synetech


@劃線湯姆榜:

這是Technet對神秘的'+'和逗號的解釋:

copy / b Source + ,,

逗號表示遺漏   Destination參數。

copy命令支持將多個文件合併到一個目標文件中。由於無法在命令提示符處使用空格字符指定空白目標,因此可以使用兩個逗號來表示該目標。

這是Technet的複制命令參考: http://technet.microsoft.com/en-us/library/bb490886.aspx


32
2017-07-13 14:54



現在,這只是搞砸了語法。嚴重的是, 他們在想什麼? 另請注意相同的文檔說“目的地:必需。”......我很驚訝。 - sth
這似乎甚至沒有在Vista中工作......我想知道他們是否達到了他們的感覺? - quillbreaker
適用於Windows 7 - Imran
它甚至沒有逗號也適用於我:copy file.ext +因此,文檔與實際行為相差甚遠,因為行為來自任何合理的期望。 - Abgan
它適用於Windows Server 2008,但前提是您在包含該文件的文件夾中 - FrinkTheBrave


如果您想自己編寫代碼,.NET會提供 File.SetLastAccessTimeFile.SetCreationTime 和 File.SetLastWriteTime 方法。


22
2017-07-10 11:52





這是一個使用powershell的遞歸版本...這將更改所有文件和子目錄的最後修改時間,以及此目錄的子目錄中的文件

ps c:myDir> Get-ChildItem . * -recurse | ForEach-Object{$_.LastWriteTime = get-date}

21
2017-09-09 09:18



不那麼冗長,但僅使用標準的Powershell縮寫: ls * -recurse | % { $_.LastWriteTime = Get-Date } - Jonas


我試過這個在我的批處理腳本中創建一個空文件。你可以用這個:

ECHO text>file1.txt

15
2017-09-09 09:17



這是BY FAR最好的快速方法..我只需要創建一個.gitignore文件,Windows 7一直在抱怨“必須輸入文件名”等等。 echo pie>.gitignore 幹得好吃 - 謝謝!
@Alex這是無關的,但是Windows錯誤是因為文件以句點開頭。在Windows資源管理器中有一個奇怪的黑客可以解決這個問題:使文件以句點結束。所以輸入 .gitignore. 當您按Enter鍵時,Windows將刪除尾隨句點。瘋了,但它的確有效。 - Brad Cupit
我希望我能夠給予足夠多的讚成,以便能夠吸引大眾玩家。 - Jonathan Mee
這不會創建一個空文件,file1.txt中有“text”。 - Joshua Meyers


的GnuWin32 project具有Unix命令行實用程序的Gnu版本的Windows端口。

它來自許多單獨的軟件包,您可以只安裝所需的命令而不需要其他依賴項。對於 touch你需要的 的coreutils 包。


14
2017-09-09 09:13





cygwin 附帶 touch。我知道你提到你不想安裝整個框架,但是cygwin非常輕量級,可以從dos命令窗口調用,而不需要打開整個unix-like命令行。

您還可以控制要安裝的工具,因此您只需安裝即可 touch.exe 文件,並留下框架的其餘部分。


13
2017-09-09 09:19



在這裡,您需要安裝的只是使用該工具的目錄中的touch.exe和cygwin.dll文件。與使用基於cygwin的工具相比,沒有其他依賴性。 - Tall Jeff
當我嘗試這個(win7x64)我需要4個cygwin dll除了touch.exe:cygiconv-2.dll cygintl-8.dll cygwin1.dll cyggcc_s-1.dll - matt wilkie


這是我寫的一個簡單的regfile 在Windows資源管理器中右鍵單擊“觸摸”。編寫腳本也很容易,因為它只是調用:

cmd.exe /c copy %1+nul %1 /by

13
2017-12-31 12:39



別忘了 copy nul some_file 創建一個空文件(這是我看到的 touch 最常用的)。 - Joey
確認! Zip文件無法訪問(關於brinkster22.com需要作為引用網站的事情)。喬恩,你能更新一下嗎? - Dan7119
適用於Win7。在WinXP上不起作用:執行“複製”後文件時間保持不變。 - Egor Skriptunoff