it-swarm-vi.com

Windows tương đương với lệnh Linux 'chạm'?

Bạn sử dụ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. các lệnh có thể truy cập qua C++, .NET, C # hoặc một cái 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ể thì cũng là nguồn mở

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

Nếu bất 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, tôi sẽ nghĩ mọi thứ khác được bao phủ trong câu hỏi được liên kết.

167
facepalmd

Nếu bạn muốn chạm vào dấu ngày của tệp bằng windows, hãy sử dụng lệnh sau tại lệnh Nhắc:

copy /b filename.ext +,,

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

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

Nếu bạn muốn chỉ định thời gian và ngày 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 chỉ ra thiếu sót của tham số Destination.

Chỉnh sửa dựa trên nhận xét của Lumi và Justin: đặt phần này vào một tệp bó, vd. chạm.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).

349
Gish Domains

Tôi đã sử dụng và đề xuất nxutils là các cổng Win32 gốc của rất nhiều tiện ích Unix phổ biến. Có một lệnh touch trong đó.

160
Greg Hewgill

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
95
ThiagoAlves
type nul >>file & copy file +,,
  • Tạo file nếu nó không tồn tại.
  • Lá nội dung tập tin một mình.
  • Chỉ cần sử dụng cmd dựng sẵn.
  • Cả hai lần truy cập cuối cùng lần tạo lần cập nhật.

CẬP NHẬT

Trời ạ! Điều này không hoạt động trên các tệp chỉ đọc, trong khi touch thì không. 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"
58
bobbogo

@ dash-tom-bang:

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

sao chép/b Nguồn + ,

Dấu phẩy chỉ ra thiếu sót của tham số Destination.

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

Và đây là tài liệu tham khảo lệnh sao chép của Technet: http://technet.Microsoft.com/en-us/l Library/bb490886.aspx

32
Faredoon

Nếu bạn cảm thấy muốn tự mã hóa nó, .NET cung cấp các phương thức File.SetLastAccessTime , File.SetCreationTimeFile.SetLastWriteTime .

23
Fredrik Mörk

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

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

Dự án GnuWin32 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ần phụ thuộc khác. Đối với touch bạn sẽ cần gói CoreUtils .

15
Dave Webb

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

ECHO text>file1.txt
15
pkm

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

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

14
serg10

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

cmd.exe /c copy %1+nul %1 /by
14
Jon Galloway

Cổng win32 gốc của nhiều lệnh unix , bao gồm cả cảm ứng.

Tôi đã sử dụng nó trước đây và nó hoạt động tốt - không cài đặt, không DLL, v.v.

12
Adam Davis

Hãy thử cái này từ CodeProject .

  • Không cần cài đặt.
  • Nếu bạn muốn, bạn thậm chí có thể sửa đổi nguồn.
11
Prakash

Bạn cũng có thể cài đặt Cygwin cung cấp cho bạn Touch cũng như rất nhiều lệnh * NIX khác.

9
jamesaharvey

Từ một câu hỏi tương tự trên Stack Overflow.

Để cập nhật dấu thời gian (bỏ qua chức năng khác của touch), tôi sẽ sử dụng:

copy /b filename.ext +,,
5
Dennis Williamson

Có cổng Windows của nhiều tiện ích Unix. Hãy xem nxutils hoặc GnuWin32 dự án.

5
VladV

từ trang web:

Funduc Software Touch là tiện ích 'chạm' miễn phí cho phép bạn thay đổi tem thời gian/ngày &/hoặc thuộc tính trên một hoặc nhiều tệp. Ngoài ra, FS Touch có thể thêm/bớt một số giây được chỉ định từ thời gian tệp hiện có. Bạn có thể chỉ định (các) tệp và/hoặc thư mục con nào sẽ thay đổi thông qua 'mặt nạ tệp phức tạp'. Chương trình có thể được chạy từ tương tác hoặc dòng lệnh. Mới đối với phiên bản 7.2 là một công tắc dòng lệnh để thay đổi dấu thời gian đã sửa đổi tệp +/- số giây đã chỉ định.

FS Touch chạy trên Windows XP, Vista, Windows 7 và Windows 8.

4
Marek

Nội dung này có thể được lưu vào một tập tin reg. Điều này sẽ thêm một menu ngữ cảnh nhấp chuột phải cho tất cả các tệp có khả năng "Touch File" (được thử nghiệm trên Windows 7). Sao chép tất cả các dòng sau vào tệp reg. Chạy tệp và phê duyệt câu hỏi. Nhấp chuột phải vào bất kỳ tệp nào (hoặc nhiều tệp) - tùy chọn "Chạm vào tệp" hiện khả dụng.

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\" +,,"
4
SharonBL

Làm thế nào về codeproject "Chạm cho Windows": http://www.codeproject.com/KB/appluggest/touch_win.aspx

chỉnh sửa; Câu hỏi tương tự ở đây: https://stackoverflow.com/questions/51435/windows-version-of-the-unix-touch-command/51439

4
CheapScotsman

Nếu bạn đang sử dụng git cho một hoặc nhiều dự án, thì git-bash dựa trên mingw cho Windows có lệnh touch. Tôi muốn cảm ơn @ greg-hewgill vì đã chỉ ra cho tôi rằng các tiện ích nix tồn tại cho các cửa sổ, bởi vì chính điều đó đã khiến tôi có ý tưởng thử chạm vào git-bash.

3
Superole

trong PowerShell thử:

ni fileName.txt

NI là bí danh của Mục mới cmdlet.

3
Monfa.red

Tôi đã tìm thấy một cách nhanh chóng để làm điều đó nếu bạn đã cài đặt vim (không tuyệt vời cho các tệp lớn, sẽ mở toàn bộ tệp sau đó đóng nó ...)

vim foobar.txt +wq!

Đối số "+" để chạy các lệnh sau. "wq!" là "viết, bỏ, ép". Điều này sẽ mở tập tin, thực hiện lưu, sau đó đóng nó ngay lập tức sau đó.

2
Jason

Lưu các mục sau dưới dạng touch.bat trong thư mục% Windir%\system32 hoặc thêm thư mục được lưu vào biến môi trường PATH của bạn:

@echo off
if %1.==. goto end
if not exist %1 goto end
copy /b %1 +,, > nul
echo %1 touched!
:end

Sử dụng mẫu:

touch *.cpp
touch somefile.c

Tham khảo: Microsoft KB 69581

2
Tim Partridge

Tôi muốn tính năng 'chạm' của nhân bản/sao chép ngày của tệp từ một tệp khác, nguyên bản và có thể sử dụng được từ một tệp bó.

Vì vậy, 'kéo và thả' tệp video vào tệp bó, FFMPEG chạy, sau đó 'Ngày tạo' và 'Ngày sửa đổi' từ tệp đầu vào được sao chép vào tệp đầu ra.

Điều này ban đầu có vẻ đơn giản cho đến khi bạn thấy các tệp bó rất tệ trong việc xử lý tên tệp unicode, PowerShell trong dòng bị rối với các ký hiệu tên tệp và thoát hai lần là một cơn ác mộng.

Giải pháp của tôi là biến phần 'chạm' thành tập lệnh PowerShell riêng biệt mà tôi gọi là 'CLone-FILE-DATE.ps1' và nó chứa:

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

Sau đây là ví dụ sử dụng trong tệp bó 'CONVERT.BAT' của tôi:

%~dp0\ffmpeg -i "%~1" ACTION "%~1-output.mp4"

CHCP 65001 > nul && PowerShell -ExecutionPolicy ByPass -File "%~dp0\CLONE-FILE-DATE.PS1" "%~1" "%~1-output.mp4"

Tôi nghĩ PowerShell có thể đọc được, vì vậy sẽ chỉ giải thích lô nói:

% ~ dp là thư mục hiện tại của tệp bó.

% ~ 1 là đường dẫn của tệp được thả vào lô mà không có dấu ngoặc kép.

CHCP 65001> nul đặt các ký tự thành UTF-8 và nuốt đầu ra.

- ExecutPolicy ByPass cho phép bạn chạy PowerShell mà không cần sửa đổi chính sách toàn cầu, có ở đó để ngăn mọi người vô tình chạy tập lệnh.

1
WhoIsRich

Thử

tập tin fsutil createnew new.txt 0

1
Peter Hacke

Năm lựa chọn thay thế được đề cập ở trên, cộng thêm ba lựa chọn khác không được đề cập ở đây, có thể được tìm thấy trên SuperUser: "Lệnh chạm đệ quy Windows"

1
JdeBP

Điều này hơi không liên quan đến câu hỏi ban đầu, nhưng tôi thấy điều này rất hữu ích trên Windows do GUI.

Tôi đang sử dụng tiện ích TouchPro cung cấp GUI (tích hợp vào Explorer Shell):

http://www.jddesign.co.uk/products/touchpro/touchpro.htm

1
rustyx

Chà, nếu bạn thực sự muốn có sẵn lệnh touch, bạn có thể đặt nó trong một tệp bó có tên touch.bat và dán vào C:\Windows:

TYPE NUL >>%1

Đủ đơn giản.

1
MD XF

Người Unix đã khắc phục sự cố chung về cập nhật ngày tệp của bất kỳ tệp nào bằng lệnh touch . Tuy nhiên, đối với Windows, đôi khi một phương pháp đơn giản hơn có thể áp dụng cho các trường hợp đặc biệt.

Tôi cần cập nhật dấu thời gian của phím tắt ứng dụng trong Windows 8.1 để có thể thay đổi màu nền của Khối ứng dụng, xem this SO question . Thay vì thực hiện một trong những công cụ thông minh ở trên, tôi thấy việc chỉnh sửa trường bình luận của phím tắt dễ dàng hơn. Hầu hết mọi người để trống, nhưng tất nhiên, một nhận xét hữu ích nhanh chóng được hình thành. Và nếu một bình luận tồn tại, thêm hoặc xóa một giai đoạn cuối cùng không bao giờ gây hại.

0
Roland

Tôi đánh giá cao đây là một câu hỏi cũ, tôi mới phát hiện ra cảm ứng trên hệ thống Windows 10 của mình. Tôi đã tải xuống và cài đặt Git từ tại đây (tôi nghĩ) và có vẻ như cảm ứng và nhiều tiện ích khác có trong thư mục bin.

0
0909EM

Bởi vì tôi cũng cần điều này và một số thứ khác, tôi đã tạo tiện ích mở rộng Shell của riêng mình để thực hiện điều này: AllSorts Tôi cũng đã mở nguồn này tại đây

0
Stijn Sanders