Câu hỏi Windows tương đương với lệnh Linux 'touch'?


Bạn sử dụng những gì khi bạn muốn cập nhật trường sửa đổi ngày của một tệp trên Windows?

  1. lệnh có thể truy cập thông qua C ++, .NET, C # hoặc thứ gì đó có nguồn gốc từ Windows (tốt nhất là Vista)
  2. công cụ / ứng dụng tốt nhất là miễn phí và nếu có thể cũng như nguồn mở

Chỉnh sửa:  đã có một trang cho các ứng dụng như được chỉ ra bởi CheapScotsman đây.

Nếu có ai biết làm thế nào tôi có thể làm điều này thông qua C ++, C #, WSH hoặc một cái gì đó tương tự, tốt và tốt, nếu không tôi sẽ nghĩ mọi thứ khác được đề cập trong câu hỏi được liên kết.


151
2018-05-29 00:45


gốc


Bốn lựa chọn thay thế được đề cập ở trên, cộng với bốn lựa chọn khác không được đề cập ở đây, có thể được tìm thấy trong câu trả lời cho một câu hỏi tương tự: "Windows Recursive Touch Command" - JdeBP
stackoverflow.com/questions/210201/…    đề cập đến tải, bao gồm REM.>a - barlop


Các câu trả lời:


Nếu bạn muốn chạm vào dấu ngày tháng của một tập tin bằng cách sử dụng các cửa sổ, sử dụng lệnh sau tại dấu nhắc lệnh:

copy /b filename.ext +,,

(Ở đâu filename.ext là tên tệp của bạn). Các +,, là một lá cờ đặc biệt copy nói đơn giản cập nhật ngày / giờ trên tệp:

* Thay đổi thời gian và ngày tháng của một tập tin

Nếu bạn muốn chỉ định ngày và giờ hiện tại cho một tệp mà không sửa đổi tệp, hãy sử dụng cú pháp sau:

copy /b Source+,,

Dấu phẩy biểu thị sự thiếu sót của tham số Đích.

Chỉnh sửa dựa trên các bình luận của Lumi và Justin: đặt nó vào một tập tin thực thi, ví dụ. touch.cmd

@COPY /B %1+,, %1

Điều này hoạt động ngay cả khi tệp không nằm trong thư mục hiện tại (được thử nghiệm trên Windows 7).


333
2017-09-09 09:13



Điều này đang làm gì? Nó được ghi chép ở đâu? (Google không lập chỉ mục "+ ,," và trang web MS không dẫn tôi đi đúng hướng như tìm kiếm trên 'bản sao' sẽ không có gì hữu ích.) Ý tôi là, nó hoạt động tốt và tôi sẽ lấy nhiều điều, nhưng tôi tò mò. - dash-tom-bang
Tài liệu cho copy: technet.microsoft.com/en-us/library/bb490886.aspx - Joseph Hansen
type touch.bat Là @echo off và dòng tiếp theo copy /b %1 +,, - Đặt nó vào C:\bin hoặc những gì có bạn cho các kịch bản của riêng bạn, và sau đó bạn có thể sử dụng nó như touch myfile.txt. - Lumi
Trong Win7, thao tác này sẽ không hoạt động nếu bạn không ở trong thư mục chứa tệp. Nó sẽ tạo một bản sao trong thư mục làm việc hiện tại.
Nếu bạn cần làm điều này trong một thư mục từ xa (đường dẫn UNC) - bạn cũng phải xác định đích đến lệnh sao chép - copy /b Source+,, Source - Ở đâu Source bao gồm đường dẫn đầy đủ đến tệp - Justin


Tôi đã sử dụng và đề xuất unxutils đó là các cổng Win32 bản địa của rất nhiều tiện ích Unix phổ biến. Đây là một touch lệnh trong đó.


160
2017-09-09 14:18



Như hầu như tất cả các cổng unix-to-windows bao giờ hết, điều này không làm việc với các ký tự unicode trong tên tập tin bên ngoài của bộ mã hóa như là mặc định cho các chương trình không unicode. Tên tệp thử nghiệm sẽ tăng lên mỗi công cụ như vậy: "test тест τεστ.txt" - RomanSt
gnuwin32 có nó. nhưng quả thực, gnuwin32 cũng không thành công cho các ký tự unicode. - barlop
Cập nhật từ năm 2017 Trong Windows 10, chúng ta có thể sử dụng hệ thống con Linux cho các cửa sổ, cài đặt bash. Không cần cygwin, MinGW, unxutils hoặc bất kỳ unix một phần nào khác cho các cổng windows. docs.microsoft.com/en-us/windows/wsl/install-win10 - Davos


Nếu tất cả những gì bạn muốn là thay đổi ngày sửa đổi cuối cùng của tệp (đó là trường hợp của tôi):

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

90
2018-02-16 15:21



PowerShell FTW. Tôi có nghĩa là, nghiêm túc, unix là mát mẻ nhưng PS là mát. - matt
Bạn có thể cập nhật lần cuối cùng ghi cho nhiều tệp / thư mục
Điều này sẽ chỉ hoạt động trên một tệp. Đối với nhiều tệp: ls * | ForEach-Object {$ _. LastWriteTime = Get-Date} - Eli Algranti
Nếu bạn muốn thực hiện nó một cách đệ quy, nó hoạt động khá tốt: gci -recu -inc "."|% {$ _. LastWriteTime = Get-Date} - BrainSlugs83
@ BrainSlugs83: sử dụng backticks `cho mã: gci -recu -inc "*.*" | % { $_.LastWriteTime = Get-Date } - alldayremix


type nul >>file & copy file +,,
  • Tạo file nếu nó không tồn tại.
  • Chỉ để lại nội dung tệp.
  • Chỉ sử dụng cmd được tích hợp sẵn.
  • Cả hai truy cập lần cuối và sự sáng tạo lần cập nhật.

CẬP NHẬT

Gah! Điều này không hoạt động trên các tệp chỉ đọc, trong khi touch làm. Tôi đề nghị:

: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"

51
2017-11-25 10:51



Thật đáng tiếc là bản sao không thể bỏ qua thuộc tính + r theo cách xcopy. Hoặc, thật đáng tiếc là xcopy không hỗ trợ filename +,, cú pháp. - Abel
Thật không may điều này không hoạt động (ít nhất là không phải trong Windows 7). Có vẻ như trình thông dịch lệnh không cập nhật dấu thời gian của đích của một chuyển hướng nếu tệp không thực sự được sửa đổi (tức là, không có dữ liệu để chuyển hướng). - Synetech


@ dash-tom-bang:

Đây là lời giải thích của Technet về bí ẩn '+' và dấu phẩy:

copy / b Nguồn + ,,

Dấu phẩy biểu thị sự thiếu sót của   thông số Đích.

Lệnh sao chép hỗ trợ hợp nhất nhiều tệp vào một tệp đích duy nhất. Vì không thể chỉ định một đích trống bằng ký tự khoảng trắng tại dấu nhắc lệnh, nên có thể sử dụng hai dấu phẩy để biểu thị điều đó.

Và đây là tham chiếu lệnh copy của Technet: http://technet.microsoft.com/en-us/library/bb490886.aspx


32
2017-07-13 14:54



Bây giờ đó chỉ là cú pháp sai lầm. Nghiêm túc, họ đang nghĩ gì vậy? Cũng lưu ý các tài liệu tương tự nói "Điểm đến: Bắt buộc." ... Tôi ngạc nhiên. - sth
Điều này dường như thậm chí không hoạt động trong Vista ... Tôi tự hỏi liệu họ có đến được giác quan của họ không? - quillbreaker
Hoạt động trong Windows 7 - Imran
Nó làm việc cho tôi ngay cả khi không có dấu phẩy: sao chép file.ext + Vì vậy, các tài liệu là như xa hành vi thực tế như hành vi là từ bất kỳ kỳ vọng hợp lý. - Abgan
Nó hoạt động trong Windows Server 2008 nhưng chỉ khi bạn đang ở trong thư mục chứa tệp - FrinkTheBrave


Nếu bạn cảm thấy muốn tự viết mã, .NET cung cấp File.SetLastAccessTime, File.SetCreationTime và File.SetLastWriteTime phương pháp.


22
2017-07-10 11:52





đây là một phiên bản đệ quy sử dụng PowerShell ... điều này sẽ thay đổi thời gian sửa đổi cuối cùng cho tất cả các tập tin và thư mục con, và các tập tin trong thư mục con của thư mục này

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

21
2017-09-09 09:18



Ít tiết nhưng chỉ sử dụng các viết tắt chuẩn Powershell: ls * -recurse | % { $_.LastWriteTime = Get-Date } - Jonas


Tôi đã thử điều này để tạo một tập tin trống trong tập lệnh batch của tôi. Bạn có thể sử dụng điều này:

ECHO text>file1.txt

15
2017-09-09 09:17



Đây là BY FAR phương pháp nhanh nhất tốt nhất .. Tôi chỉ cần tạo một tệp .gitignore và Windows 7 tiếp tục phàn nàn "phải nhập tên tệp" v.v. echo pie>.gitignore đã làm việc một điều trị - cảm ơn!
@Alex Điều này không liên quan, nhưng lỗi cửa sổ đó là do tệp bắt đầu bằng dấu chấm. Có một hack lạ lùng để có được xung quanh đó trong Windows Explorer: làm cho tập tin kết thúc với một khoảng thời gian quá. Vì vậy, loại .gitignore. và khi bạn nhấn Enter, Windows sẽ xóa dấu chấm. Điên, nhưng nó hoạt động. - Brad Cupit
Tôi ước rằng tôi có thể đưa ra đủ số lượng upvotes mà nó sẽ khiến các game thủ nổi tiếng. - Jonathan Mee
Điều này không tạo ra một tập tin rỗng, mặc dù file1.txt có "văn bản" trong đó. - Joshua Meyers


Các GnuWin32 dự án có các cổng Windows của các phiên bản Gnu của các tiện ích dòng lệnh Unix.

Nó đi kèm như một số gói riêng biệt và bạn có thể cài đặt chỉ các lệnh bạn cần mà không có các phụ thuộc khác. Dành cho touchbạn sẽ cần CoreUtils gói.


14
2017-09-09 09:13





cygwin đi cùng touch. Tôi biết bạn đã đề cập rằng bạn không muốn cài đặt toàn bộ khung công tác, nhưng Cygwin khá nhẹ và có thể được gọi từ cửa sổ lệnh dos mà không cần bật toàn bộ dòng lệnh unix.

Bạn cũng có thể kiểm soát những công cụ để cài đặt, vì vậy bạn chỉ cần cài đặt touch.exe và để phần còn lại của khung công tác.


13
2017-09-09 09:19



Để điểm của bạn ở đây, tất cả những gì bạn cần cài đặt là tập tin touch.exe và cygwin.dll trong một thư mục để sử dụng công cụ này. Không có sự phụ thuộc nào khác liên quan đến việc sử dụng các công cụ dựa trên Cygwin. - Tall Jeff
khi tôi thử điều này (win7x64) tôi cần 4 dll cygwin ngoài touch.exe: cygiconv-2.dll cygintl-8.dll cygwin1.dll cyggcc_s-1.dll - matt wilkie


Đây là một regfile đơn giản mà tôi đã viết thêm nhấp chuột phải vào "touch" trong Windows explorer. Nó cũng dễ dàng để viết kịch bản, vì nó chỉ gọi:

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

13
2017-12-31 12:39



Và đừng quên copy nul some_file để tạo một tệp trống (đó là những gì tôi thấy touch thường được sử dụng cho). - Joey
Ack! Không thể truy cập tệp zip (điều gì đó về brinkster22.com cần phải là trang web giới thiệu). Jon, bạn có thể cập nhật điều này? - Dan7119
Hoạt động trên Win7. Không hoạt động trên WinXP: thời gian tệp vẫn giữ nguyên sau khi thực hiện "sao chép". - Egor Skriptunoff