Làm cách nào để tạo tệp văn bản trống từ tệp bó?


244

Ai đó có thể nhớ lệnh tạo tệp trống trong MSDOS bằng tệp BAT là gì không?


3
Cũng tại stackoverflow.com/questions/1702762 , "Làm cách nào để tạo một tệp trống tại dòng lệnh?".
Peter Mortensen

6
Bạn không nhầm lẫn DOS và cmd.exe, phải không?
người dùng không xác định

ĐỌC TÔI: Set-Content "your_file.txt" .gitignore -Encoding utf8đây là trường hợp nhạy cảm và buộc mã hóa utf8! (Tôi cũng đăng bài này như một câu trả lời).
Wolfpack'08

Câu trả lời:


235
echo. 2>EmptyFile.txt

49
Điều này lặp lại một dòng mới cho thiết bị xuất chuẩn, mặc dù ... câu trả lời của tôi không.
ephemient

7
Đôi khi nó có liên quan; Tôi đã từng có cảm ứng nằm xung quanh cho đến khi tôi có ý tưởng chỉ sao chép tệp NUL (hoặc gõ tệp NUL>) cho mục đích nhận tệp 0 byte. :-)
Joey

18
Để hợp nhất câu trả lời của ephemient và câu trả lời này, bạn có thể làm: "echo.> NUL 2> EmptyFile.txt" để đạt được kết quả tương tự mà không cần đưa ra một dòng mới
cmptrgeekken

7
Tại sao lại .echo.
Ninh Phạm

3
@Reegan Nếu bạn sử dụng echo 2mà không có ., bảng điều khiển sẽ ghi "ECHO bị tắt". Sử dụng echo. 2hiệu quả đầu ra bảng điều khiển im lặng bằng cách chỉ hiển thị một dòng mới.
OneManBand

362
sao chép NUL EmptyFile.txt

DOS có một vài tệp đặc biệt (thiết bị, thực tế) tồn tại trong mọi thư mục, NULtương đương với UNIX /dev/null: đó là một tệp ma thuật luôn trống và vứt bỏ mọi thứ bạn viết cho nó. Đây là danh sách một số người khác; CONđôi khi cũng hữu ích.

Để tránh có bất kỳ đầu ra nào, bạn có thể sử dụng

sao chép / y NUL EmptyFile.txt> NUL

/yngăn không cho copyhỏi một câu hỏi mà bạn không thể nhìn thấy khi đầu ra đi đến NUL.


36
+1 - câu hỏi không nêu một tệp trống , vì vậy câu trả lời được chấp nhận là sai.
Joe

9
Giải pháp của DanielSmurf thực sự tạo ra một tệp trống - một dòng mới đi đến thiết bị xuất chuẩn, không có gì đi đến thiết bị lỗi chuẩn (hướng vào tệp mới). Nhưng nhờ cho 1 anyways
ephemient

2
gõ nul> EmptyFile.txt là giải pháp ngắn nhất. Vẫn là câu trả lời của bạn tốt hơn giải pháp được chấp nhận, vì tập tin của bạn sẽ thực sự trống rỗng. +1
TPAKTOPA

3
Cảnh báo: có, câu hỏi là về cách tạo một tệp trống, tuy nhiên thông thường bạn muốn "đảm bảo tệp tồn tại". Khi sử dụng copy /Y NULlệnh, nó có thể xóa nội dung hiện có. Nếu bạn đã quen với touchlệnh của Unix , thì đây có thể không phải là điều bạn mong đợi.) Sử dụng type NUL >> emptyfile.txtsẽ an toàn hơn trong vấn đề này.
eckes

Tôi không thể tìm thấy bất kỳ thông tin nào CON, ngoài những thông tin được liên kết trong câu trả lời này. Ai đó có thể chia sẻ một số đọc nhẹ?
Sinjai

182
type NUL > EmptyFile.txt

Sau khi đọc hai bài viết trước, sự pha trộn của hai là những gì tôi nghĩ ra. Có vẻ sạch sẽ hơn một chút. Không cần phải lo lắng về việc chuyển hướng "1 tệp đã sao chép." thông báo đến NUL, giống như bài viết trước, và nó trông rất đẹp bên cạnh bài viết ECHO OutputLineFromLoop >> Emptyfile.txtthường sẽ theo sau trong một tệp bó.


13
+1 đây là điều tự nhiên xuất hiện đầu tiên trong tâm trí, không phải là những vấn đề với stderr, v.v.
Amit N Nikol

2
Bạn nói đúng. Phương pháp này tránh cờ / y trên lệnh sao chép.
djangofan

Ngắn gọn và dễ dàng. Một vài giải pháp khác ở đây không tạo ra một tệp mới có byte bằng 0!
Christian St.

66

Kỹ thuật tôi thu thập từ các câu trả lời khác:

Làm cho tệp 0 byte trở nên rất rõ ràng, tương thích ngược:

type nul >EmptyFile.txt

ý tưởng thông qua: nặc danh , Daniel Backett , có thể là những người khác, bản thân tôi được truyền cảm hứng từ công việc của JdeBP

Một tệp 0 byte theo cách khác , nó tương thích ngược:

REM. >EmptyFile.txt

ý tưởng qua: Johannes

Một tệp 0 byte theo cách thứ ba cũng tương thích ngược:

echo. 2>EmptyFile.txt

ý tưởng thông qua: TheSmurf

Tệp 0 byte theo cách có hệ thống có thể có sẵn kể từ Windows 2000:

fsutil file createnew EmptyFile.txt 0

ý tưởng qua: Emm

Một tệp 0 byte ghi đè lên các tệp chỉ đọc

ATTRIB -R filename.ext>NUL
(CD.>filename.ext)2>NUL

ý tưởng qua: copyitright

Một dòng mới (2 byte: 0x0D 0x0Atheo ký hiệu hex , được viết thay thế là \r\n):

echo.>AlmostEmptyFile.txt

Lưu ý: không có khoảng trống giữa echo, .>.

ý tưởng thông qua: Làm thế nào bạn có thể lặp lại một dòng mới trong các tệp bó?


chỉnh sửa Dường như bất kỳ lệnh không hợp lệ nào được chuyển hướng đến một tệp sẽ tạo ra một tệp trống. heh, một tính năng! tương thích: uknown

TheInvisibleFeature <nul >EmptyFile.txt

Tệp 0 byte: lệnh không hợp lệ / có tên ngẫu nhiên (tương thích: uknown):

%RANDOM%-%TIME:~6,5% <nul >EmptyFile.txt

thông qua: nguồn tuyệt vời cho ngẫu nhiên bởi Hùng Huỳnh

chỉnh sửa 2 Andriy M chỉ ra cách có thể gây cười / kích thích nhất để đạt được điều này thông qua lệnh không hợp lệ

Tệp 0 byte: lệnh không hợp lệ / cách thú vị (tương thích: không xác định)

*>EmptyFile.txt

ý tưởng thông qua: Andriy M

Tệp 0 byte cách thứ 4 sắp tới :

break > file.txt

ý tưởng thông qua: foxidrive nhờ bình luận của Double Gras !


Đó là type nul ..., không type <nul ..., thực sự.
Andriy M

@AndriyM cảm ơn bạn đã đúng Tôi đã chỉnh sửa! Không để ý vì thú vị là nó hoạt động với cái sai. điều đó có nghĩa là bất kỳ lệnh không hợp lệ nào được chuyển hướng đến tên tệp sẽ tạo ra một tệp trống! chỉ cần thử với NonExistentCommand <nul >EmptyFile.txtvà nó đã hoạt động
n611x007

vì sẽ không an toàn khi dựa vào tên lệnh được mã hóa cứng và hy vọng nó là "không hợp lệ", tôi đã thêm một tùy chọn tên lệnh ngẫu nhiên
n611x007

2
Còn một điều nữa : break > file.txt, đạo cụ foxidrive
Gras Double

3
Và hầu hết các lệnh có thể được sử dụng >>nếu bạn cần "phải tồn tại nhưng không nên cắt ngắn nếu tồn tại" (giống như Unix touch)
eckes

25

NHỚ. > trống.file


Tôi bị kẹt trên Windows CE và đây là câu trả lời duy nhất tạo và làm trống tệp! Các cách tiếp cận khác hoặc thêm một dòng trống hoặc đơn giản là không hoạt động ...
AntonyG

Vấn đề duy nhất với giải pháp này là nếu có một tệp có tên là REM trong thư mục hiện tại và bạn nhập REM., cmd sẽ trả lời bằng "'rem.' không được công nhận là một 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ó. "
DodgyCodeException

@DodgyCodeException, sử dụng rem/thay vì rem.giải quyết vấn đề đó ...
aschipfl

@aschipfl cảm ơn, thật thú vị. Thật thú vị khi câu trả lời từ năm 2010 này có các bình luận cách nhau vài năm. Một cuộc trò chuyện chậm rãi!
DodgyCodeException

8

Nếu có khả năng tệp được ghi đã tồn tại và chỉ được đọc, hãy sử dụng mã sau:

ATTRIB -R filename.ext
CD .>filename.ext

Nếu không có tệp nào tồn tại, chỉ cần làm:

CD .>filename.ext

(mã được cập nhật / thay đổi theo nhận xét của DodgyCodeException)

Để khắc phục mọi lỗi có thể phát sinh:

ATTRIB -R filename.ext>NUL
(CD .>filename.ext)2>NUL

1
Vấn đề duy nhất với giải pháp này là nếu có một tệp được gọi là CD(không có phần mở rộng) trong thư mục hiện tại và bạn nhập CD., cmd sẽ trả lời bằng "'CD.' không được công nhận là một 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 thay vào đó CD .( gõ một khoảng trắng trước dấu chấm) thì nó sẽ hoạt động.
DodgyCodeException


7

Thêm một để thêm vào các cuốn sách - ngắn và ngọt ngào để gõ.

break>file.txt
break>"file with spaces in name.txt"

Tôi đoán chúng tôi woyld bỏ qua các trích dẫn
Nam G VU

@NamGVU Các trích dẫn được sử dụng trong tên tệp đích, nếu bạn chọn sử dụng các thành phần tên tệp dài như dấu cách hoặc & v.v. Chúng không phải là một phần của nội dung tệp.
foxidrive

Vâng, tôi đồng ý ^^ Quyền cập nhật của bạn như đã thảo luận.
Nam G VU

@NamGVU Các trích dẫn có thể được đặt đúng chỗ có hoặc không có tên tệp dài. Tôi đoán nếu nó được gõ từ dòng lệnh với một tên tệp ngắn, thì bạn sẽ không muốn gõ không cần thiết.
foxidrive

Tôi đề nghị loại bỏ dòng thứ hai từ câu trả lời này. IMO đây là câu trả lời tốt nhất cho câu hỏi cho đến nay, nhưng dòng thứ hai không thực sự tăng giá trị trừ khi người dùng thử không biết những điều cơ bản về xử lý khoảng trắng cho dòng lệnh.
kayleeFrye_onDeck 17/07/18

2

Bạn có thể sử dụng một TYPElệnh thay vì COPY. Thử cái này:

TYPE File1.txt>File2.txt

Nơi File1.txtnào trống rỗng.


3
Bạn cũng có thể làmtype NUL>File2.txt
Daniel Beckett

6
BTW, làm thế nào để có được File1.txt?
TomeeNS

1

Bạn cũng có thể sử dụng SETđể tạo một bytetập tin null như sau

set x=x > EmptyFile.txt

Hoặc nếu bạn không muốn tạo thêm một biến, hãy gán lại một biến hiện có như

set PROMPT=%PROMPT% > EmptyFile.txt

hoặc như thế này:

set "PROMPT=%PROMPT%" > EmptyFile.txt

0

Có những cách tiếp cận vô hạn.

Các lệnh không tạo ra kết quả nào:

break
cls
color
goto
pushd
popd
prompt
title

Các lệnh lạ:

CD.
REM.
@echo off
cmd /c
START >FILE

Lệnh lỗi thời printtạo ra một tệp trống:

print /d:EMPTY_TEXT_FILE nul

-2

Cách dễ nhất là:

echo. > Filename.txt


8
Điều này sẽ tạo ra một tệp có ký tự khoảng trắng theo sau là ký tự trả về vận chuyển theo sau là ký tự dòng mới - không phải là tệp trống.
Andriy M

Đáng xem câu trả lời của tôi (bên dưới) vì nó thay đổi mã hóa.
Wolfpack'08

-3

QUAN TRỌNG:

Nếu bạn không đặt mã hóa, nhiều phần mềm có thể bị hỏng. git là một ví dụ rất phổ biến.

Set-Content "your_ignore_file.txt" .gitignore -Encoding utf8 đây là trường hợp nhạy cảm và buộc mã hóa utf8!


3
Làm thế nào là mã hóa có liên quan để tạo một tập tin trống ? Một tập tin rỗng byte không cần bất kỳ mã hóa và đó là khó khăn để đánh dấu nó với một BOM (0 byte)
Jeb

@jeb vì mọi người điền vào các tệp trống và khi các tệp được điền được sử dụng làm tệp cài đặt, chúng sẽ tạo ra lỗi khi chúng không phải là UTF8. Trên thực tế, tôi sẽ nói rằng mọi người hầu như luôn điền vào các tệp và không để trống chúng và tôi sẽ không sử dụng bất kỳ phương pháp nào khác để tạo một tệp trống mà sau này tôi dự định thay đổi vì tôi gần như luôn muốn chắc chắn rằng các tệp của mình là UTF8. Ví dụ: hướng dẫn .git trên github yêu cầu người dùng tạo một tệp trống được điền sau và phương thức khác tạo một tệp có mã hóa Windows lạ.
Wolfpack'08
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.