Windows tương đương với 'touch' (nghĩa là cách node.js để tạo index.html)


195

Trên máy tính windows tôi gặp lỗi này

'Touch' không được nhận dạng dưới dạng lệnh nội bộ hoặc bên ngoài, chương trình có thể hoạt động hoặc tệp bó.

Khi tôi làm theo hướng dẫn để làm:

touch index.html app.js style.css

Có một cửa sổ tương đương với việc sử dụng 'cảm ứng' không? Tôi có cần phải tạo các tệp này bằng tay (và sửa đổi chúng để thay đổi dấu thời gian) để thực hiện loại lệnh này không? Điều đó dường như không ... nút-ish ...


5
Một tìm kiếm đơn giản của Google cho bạn thấy rất nhiều cửa sổ triển khai touch. Thảo luận khác tại đây: superuser.com/questions/10426/thư viện Cygwin là một bộ công cụ phổ biến của các lệnh Unix trên Windows.
jfriend00

4
Bản sao có thể có của câu hỏi này: stackoverflow.com/questions/26343974/ từ
Cá tầm nhựa

Bản sao có thể có của tệp Tạo với dòng lệnh trong Node
phuclv

1
Vui lòng chuyển trực tiếp đến câu trả lời của Raghuveer nếu bạn đã hạ cánh ở đây trong khi sử dụng PowerShell.
RBT

Câu trả lời:


279

trong loại cửa sổ cmd:

type nul > your_file.txt

Điều này sẽ tạo 0 byte trong tệp your_file.txt.

Một cách khác để làm điều đó là bằng cách sử dụng lệnh echo :

echo.> your_file.txt

tiếng vang. - sẽ tạo một tệp có một dòng trống trong đó.

Đã chỉnh sửa vào ngày 2019-04-01:

Nếu bạn cần giữ nguyên nội dung của tệp, hãy sử dụng >> thay vì>

>   Creates a new file
>>  Preserves content of the file

Thí dụ

type nul >> your_file.txt

Đã chỉnh sửa vào ngày 2020-04-07

Bạn cũng có thể sử dụng lệnh gọi .

Gọi một chương trình hàng loạt từ một chương trình khác mà không dừng chương trình hàng loạt cha mẹ. Lệnh gọi chấp nhận nhãn là mục tiêu của cuộc gọi.

Thí dụ:

call >> your_file.txt

2
trên windows 7, tùy chọn đầu tiên tạo ra một hộp thoại đáng sợ và sau đó bạn nhìn thấy access deniedtrong bảng điều khiển. Tùy chọn thứ hai hoạt động tốt!
Giải mã

13
Câu trả lời là sai, nó chỉ hoạt động khi tập tin không tồn tại. Nếu tệp tồn tại, sử dụng >>cái đầu tiên không làm gì, cái thứ hai sẽ thêm một dòng ở cuối tệp. Câu trả lời đúng là superuser.com/questions/10426/ trên
stenci

3
@stenci - Tôi vừa thử nó trên một tệp không tồn tại và nó hoạt động tốt. Nó tạo file ok. Có lẽ bạn thiếu quyền quản trị?
dcp

2
@stenci rằng liên kết siêu người dùng là tuyệt vời. Bạn nên đăng nó như một câu trả lời.
Denise Skidmore

@DeniseSkidmore Cảm ơn, tôi đã thêm câu trả lời. Nó sâu xuống và mọi người sẽ đọc bình luận của tôi cho câu trả lời này nhiều hơn câu trả lời của tôi, nhưng bây giờ nó ở đó.
stenci 15/03/18

66

Windows không bao gồm một touchlệnh.

Bạn có thể sử dụng bất kỳ phiên bản công khai nào hoặc bạn có thể sử dụng phiên bản của riêng mình. Lưu mã này touch.cmdvà đặt nó ở đâu đó trên đường dẫn của bạn

@echo off
    setlocal enableextensions disabledelayedexpansion

    (for %%a in (%*) do if exist "%%~a" (
        pushd "%%~dpa" && ( copy /b "%%~nxa"+,, & popd )
    ) else (
        type nul > "%%~fa"
    )) >nul 2>&1

Nó sẽ lặp qua danh sách đối số và đối với mỗi phần tử nếu nó tồn tại, hãy cập nhật dấu thời gian của tệp, nếu không, hãy tạo nó.


35

Bạn có thể sử dụng lệnh này: ECHO >> filename.txt

nó sẽ tạo một tập tin với phần mở rộng đã cho trong thư mục hiện tại.

CẬP NHẬT:

để sử dụng tệp trống: sao chép NUL filename.txt


8
Thậm chí tốt hơn type NUL > filename(tạo tệp 0 byte)
krzantic

23
Giống như cảm ứng, điều này sẽ không ghi đè lên tệp nếu nó tồn tại:type NUL >> filename
henon

3
Đây là một cách tuyệt vời để thêm "ECHO đang bật." vào tập tin của bạn.
ripvlan

4
điều này không cập nhật dấu thời gian của các tệp hiện có.
Denise Skidmore

1
Tôi nghĩ Denise Skidmore đang trả lời henon chứ không phải OP. (Tôi thứ hai nhận xét của cô ấy.)
Keith Russell

28

Câu trả lời là sai, nó chỉ hoạt động khi tập tin không tồn tại. Nếu tệp tồn tại, sử dụng cái đầu tiên không làm gì, cái thứ hai sẽ thêm một dòng ở cuối tệp.

Đáp án đúng là:

copy /b filename.ext +,,

Tôi tìm thấy nó ở đây: /superuser/10426/windows-equivalent-of-the-linux-command-touch/764721#764721


1
Câu trả lời này không hoạt động khi tập tin không tồn tại. (CMD tạo ra lỗi.)
Keith Russell

15

Tôi ngạc nhiên khi có nhiều câu trả lời ở đây chỉ sai . Echo không có gì vào một tập tin sẽ lấp đầy tập tin với một cái gì đó như ECHO is ON, và cố gắng lặp lại $nulvào một tập tin sẽ thực sự đặt $nulvào tập tin. Ngoài ra, đối với PowerShell, việc lặp lại $nullvào một tệp sẽ không thực sự tạo ra tệp 0kb, nhưng một cái gì đó được mã hóa thành UCS-2 LE BOM, có thể trở nên lộn xộn nếu bạn cần đảm bảo các tệp của mình không có dấu thứ tự byte.

Sau khi kiểm tra tất cả các câu trả lời ở đây và tham khảo một số câu hỏi tương tự, tôi có thể đảm bảo những câu trả lời này sẽ hoạt động trên mỗi vỏ console. Chỉ cần thay đổi FileName.FileExtensionthành đường dẫn đầy đủ hoặc tương đối của tệp bạn muốn touch; cảm ơn Keith Russell về COPY NUL FILE.EXTbản cập nhật:

CMD w / Cập nhật dấu thời gian

copy NUL FileName.FileExtension

Điều này sẽ tạo một tệp mới có tên bất cứ thứ gì bạn đặt thay vì FileName.FileExtensionvới kích thước 0 byte. Nếu tệp đã tồn tại, về cơ bản nó sẽ tự sao chép tại chỗ để cập nhật dấu thời gian. Tôi muốn nói rằng đây là một cách giải quyết hơn chức năng 1: 1 touchnhưng tôi không biết bất kỳ công cụ tích hợp nào cho CMD có thể thực hiện cập nhật dấu thời gian của tệp mà không thay đổi bất kỳ nội dung nào khác.

Cập nhật dấu thời gian của CMD

if not exist FileName.FileExtension copy NUL FileName.FileExtension

Powershell w / Cập nhật dấu thời gian

if (!(Test-Path FileName.FileExtension -PathType Leaf)) {New-Item FileName.FileExtension -Type file} else {(ls FileName.FileExtension ).LastWriteTime = Get-Date}

Vâng, nó sẽ hoạt động trong giao diện điều khiển như một lớp lót; không yêu cầu đặt nó trong tệp tập lệnh PowerShell.

PowerShell w / out Cập nhật dấu thời gian

if (!(Test-Path FileName.FileExtension -PathType Leaf)) {New-Item FileName.FileExtension -Type file}


1
Còn tình huống tệp tồn tại và bạn muốn cập nhật dấu thời gian sửa đổi của nó đến thời điểm hiện tại thì sao? Tôi không thấy những ví dụ này đạt được điều đó như thế nào.
RoG

2
Quan sát tuyệt vời, RoG! Tôi đã cập nhật câu trả lời để giải quyết vấn đề này :)
kayleeFrye_onDeck

Đây là câu trả lời tốt nhất. Tuy nhiên, tôi vẫn sẽ cải thiện nó bằng cách thay thế fsutil file CreateNew FileName.FileExtension 0bởi copy NUL Filename.FileExtensionvì cái sau ngắn hơn và làm điều tương tự.
Keith Russell

@KeithRussell IIRC có một lý do cụ thể tôi không sử dụng copyhơn fsutilnhưng nó được một lúc ... Tôi khá chắc chắn rằng là cách tôi thậm chí biết về fsutilhaha! Tôi sẽ cố gắng tìm hiểu tại sao ...
kayleeFrye_onDeck

1
Ngay cả khi họ có hành vi giống nhau, tôi đoán rằng tôi còn sớm để nói rằng một người tốt hơn, mà không cần kiểm tra tốc độ.
Keith Russell

14

Sử dụng lệnh sau trên dòng lệnh của bạn:

fsutil file createnew filename  requiredSize

Các thông tin thông tin như sau:

fsutil - Tiện ích hệ thống tệp (tệp thực thi bạn đang chạy)

tập tin - kích hoạt một hành động tập tin

createnew - hành động để thực hiện (tạo một tệp mới)

tên tệp - nghĩa đen là tên của tệp

requiredSize - sẽ phân bổ kích thước tệp theo byte trong tệp đã tạo


2
Một số giải thích là cần thiết để điều này được coi là một câu trả lời tốt. Không rõ năm từ này có nghĩa là gì.
jfriend00

1
làm việc cho tôi ... điều bắt buộc Kích thước thật kỳ lạ mặc dù ... lệnh chỉ lấp đầy tệp mới của bạn với hàng ngàn NULLs ... lạ ... vì vậy chỉ cần sử dụng 0 ... sẽ tạo ra lỗi nếu bạn bỏ qua kích thước bắt buộc .. .
DSdsdsdsd 11/03/2016

1
commnad này cần quyền riêng tư của quản trị viên :(
ADJ

1
touch cũng cập nhật dấu thời gian trên các tệp hiện có, không chỉ tạo các tệp mới.
Denise Skidmore

1
cảm ứng là một cách nhanh chóng để làm điều đó, gần nhất với nó là tiếng vang hoặc loại, tôi đoán, mặc dù đây là một công cụ rất tiện dụng để viết kịch bản và được sử dụng rộng rãi trong WS16, hãy đồng ý! docs.microsoft.com/en-us/windows-server/ad dùng / từ
Alan

10

Trên windows Power Shell, bạn có thể sử dụng lệnh sau:

New-Item <filename.extension>

hoặc là

New-Item <filename.extension> -type file

Lưu ý: New-Item có thể được thay thế bằng bí danh ni của nó


1
Đây là câu trả lời thực sự trong thế giới Windows ngày nay, nơi PowerShell là chương trình shell lệnh mặc định.
RBT

không chắc chắn về những gì bạn đang đề cập đến Windows, tôi vừa cài đặt một Windows 10 mới và Powershell chắc chắn không phải là vỏ mặc định. 'New-Item' is not recognized as an internal or external command
dùng5359531

8

Bạn có thể sao chép chức năng của cảm ứng bằng lệnh sau:

$>>filename

Những gì nó làm là cố gắng thực thi một chương trình được gọi $, nhưng nếu $không tồn tại (hoặc không phải là một thực thi tạo ra đầu ra) thì không có đầu ra nào được tạo ra bởi nó. Đây thực chất là một hack về chức năng, tuy nhiên bạn sẽ nhận được thông báo lỗi sau:

'$' không được nhận dạng dưới dạng lệnh nội bộ hoặc bên ngoài, chương trình có thể hoạt động hoặc tệp bó.

Nếu bạn không muốn thông báo lỗi thì bạn có thể thực hiện một trong hai điều sau:

type nul >> filename

Hoặc là:

$>>filename 2>nul

Các typecố gắng lệnh để hiển thị nội dung của nul, mà không làm gì nhưng lợi nhuận một EOF (cuối tập tin) khi đọc.

2>nulgửi đầu ra lỗi (đầu ra 2) đến nul (bỏ qua tất cả đầu vào khi được ghi vào). Rõ ràng lệnh thứ hai (với 2>nul) được tạo dự phòng bởi typelệnh vì nó nhanh hơn để gõ. Nhưng ít nhất bây giờ bạn có tùy chọn và kiến ​​thức.


Điều này thật tuyệt, nhưng nó luôn đặt %ERRORLEVEL%thành khác không. Bạn có thể khắc phục vấn đề đó bằng cách nối thêm một noop || cd., nhưng điều này luôn đặt lỗi thành 0, đây có thể không phải là điều bạn muốn nếu "chạm" không thành công.
Keith Russell

5

Không có lệnh - cũng không typephải echo- là cần thiết để mô phỏng lệnh 'touch' của Unix / Mac OS X trong thiết bị đầu cuối Windows Powershell. Đơn giản chỉ cần sử dụng tốc ký sau:

$null > filename

Điều này sẽ tạo một tệp trống có tên 'tên tệp' tại vị trí hiện tại của bạn. Sử dụng bất kỳ phần mở rộng tên tệp nào bạn có thể cần, ví dụ: '.txt'.

Nguồn: /superuser/502374/equivalent-of-linux-touch-to-create-an-empty-file-with-powershell (xem bình luận)


1
có vẻ như bạn đã bỏ lỡecho
sabithpocker

@sabithpocker trong Windows cmd, $ null không tồn tại và vì nó không tồn tại nên nó không tạo ra bất kỳ đầu ra nào. Bạn $null > filenamegửi đầu ra trống đó đến tên tệp (nếu bạn bắt được drift của tôi).
Keldon Alleyne

1
@sabithpocker Trong Windows Powershell, nó hoạt động mà không có echoTrong thiết bị đầu cuối dòng lệnh tiêu chuẩn (cmd) bạn cần echo. Xin lỗi vì sự nhầm lẫn.
Oliver Schafeld

@OliverSchafeld và Keldon Cảm ơn bạn đã giải thích.
sabithpocker

1
Điều này thêm BOM vào tập tin.
kayleeFrye_onDeck

3

Bạn cũng có thể sử dụng bản sao con [tên tệp] trong cửa sổ lệnh Windows (cmd.exe):

C:\copy con yourfile.txt [enter]
C:\CTRL + Z [enter] //hold CTRL key & press "Z" then press Enter key.
^Z
    1 Files Copied.

Điều này sẽ tạo ra một tập tin có tên yourfile.txttrong thư mục địa phương.


3

như đã đề cập

echo >> index.html

nó có thể là bất kỳ tập tin nào, với bất kỳ phần mở rộng nào thì làm

notepad index.html

điều này sẽ mở tập tin của bạn trong trình soạn thảo notepad


3

Tôi sử dụng cmder(một trình giả lập dòng lệnh)

Nó cho phép bạn chạy tất cả các lệnh Linux bên trong máy Windows.

Nó có thể được tải xuống từ https://cmder.net/

Tôi thực sự thích nó


1
Có chuyện gì với cảnh báo "Nhà xuất bản không xác định" khi tôi thử mở Cmder trong win10? Bummer.
Chris22

2

Giả sử tập tin tồn tại và bạn chỉ cần cập nhật dấu thời gian.

type test.c > test.c.bkp && type test.c.bkp > test.c && del test.c.bkp

2

Từ Terminal of Visual Code Studio trên Windows 10, đây là công việc giúp tôi tạo một tệp mới:

type > hello.js
echo > orange.js
ni > peach.js

1

Nếu bạn đã cài đặt Cygwin trong PC, bạn chỉ cần sử dụng tệp thực thi được cung cấp cho cảm ứng (cũng thông qua dấu nhắc lệnh của windows):

C:\cygwin64\bin\touch.exe <file_path>


-1

Có, bạn có thể sử dụng Node cho Touch Tôi chỉ sử dụng nó và nó hoạt động tốt trong windows Cmd hoặc gitbash

nhập mô tả hình ảnh ở đây


Tôi đã không đánh giá thấp điều này nhưng tôi sẽ giải thích lý do tại sao nó có thể. Câu hỏi này đã được gắn thẻ [cmd]và điều đó ngụ ý rằng OP muốn có câu trả lời hoạt động vượt trội cho CMD, nghĩa là không có tiện ích dòng lệnh nào không được cài đặt với cài đặt Windows mặc định. Điều đó sẽ loại trừ hầu như tất cả các ngôn ngữ script, thậm chí các ngôn ngữ script được tích hợp sẵn trong Windows như CScript, WScript và PowerShell. Vấn đề không phải là nó hoạt động trong CMD env, mà là có thể cho bất kỳ ai có quyền truy cập vào CMD, không bao gồm các vấn đề về quyền.
kayleeFrye_onDeck
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.