Windows ที่เทียบเท่ากับ 'touch' (เช่นวิธี node.js ในการสร้าง index.html)


196

บนเครื่อง windows ฉันได้รับข้อผิดพลาดนี้

'touch' ไม่รู้จักว่าเป็นคำสั่งภายในหรือภายนอก, โปรแกรมที่ทำงานได้หรือไฟล์แบตช์

เมื่อฉันทำตามคำแนะนำที่ต้องทำ:

touch index.html app.js style.css

มีหน้าต่างเทียบเท่ากับการใช้ 'สัมผัส'? ฉันต้องสร้างไฟล์เหล่านี้ด้วยตนเอง (และแก้ไขเพื่อเปลี่ยนการประทับเวลา) เพื่อใช้คำสั่งประเภทนี้หรือไม่? ดูเหมือนจะไม่มาก ... node-ish ...


5
การค้นหาโดย Google อย่างง่ายแสดงให้คุณเห็นถึงการใช้งาน windows touchมากมาย การสนทนาอื่น ๆ ที่นี่: superuser.com/questions/10426/ …และCygwin libraryเป็นชุดเครื่องมือทั่วไปของคำสั่ง Unix บน Windows
jfriend00

4
เป็นไปได้ซ้ำของคำถามนี้: stackoverflow.com/questions/26343974/…
Sturgeon พลาสติก

มีความเป็นไปได้ที่ซ้ำกันของการสร้างไฟล์ด้วยบรรทัดคำสั่งในโหนด
phuclv

1
โปรดข้ามไปที่คำตอบของ Raghuveerโดยตรงหากคุณลงจอดที่นี่ในขณะที่ใช้ PowerShell
RBT

คำตอบ:


279

ในประเภทหน้าต่าง cmd:

type nul > your_file.txt

สิ่งนี้จะสร้าง 0 ไบต์ในไฟล์ your_file.txt

อีกวิธีในการทำคือใช้คำสั่งecho :

echo.> your_file.txt

เสียงสะท้อน - จะสร้างไฟล์ที่มีบรรทัดว่างหนึ่งบรรทัด

แก้ไขเมื่อ 2019-04-01:

หากคุณต้องการเก็บรักษาเนื้อหาของไฟล์ให้ใช้ >> แทน>

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

ตัวอย่าง

type nul >> your_file.txt

แก้ไขเมื่อ 2020-04-07

คุณยังสามารถใช้คำสั่งโทร

เรียกโปรแกรมแบตช์หนึ่งจากอีกโปรแกรมหนึ่งโดยไม่หยุดโปรแกรมแบตช์หลัก คำสั่ง call ยอมรับฉลากเป็นเป้าหมายของการโทร

ตัวอย่าง:

call >> your_file.txt

2
บน windows 7 ตัวเลือกแรกสร้างไดอะล็อกที่น่ากลัวแล้วคุณจะเห็นaccess deniedในคอนโซล ตัวเลือกที่สองใช้งานได้ดี!
ถอดรหัส

13
คำตอบนั้นไม่ถูกต้องใช้งานได้เฉพาะเมื่อไม่มีไฟล์อยู่ หากไฟล์มีอยู่โดยใช้>>ตัวแรกไม่ทำอะไรเลยตัวที่สองจะเพิ่มบรรทัดที่ท้ายไฟล์ คำตอบที่ถูกต้องคือsuperuser.com/questions/10426/…
stenci

3
@stenci - ฉันเพิ่งลองมันในไฟล์ที่ไม่มีอยู่จริงและมันก็ใช้ได้ดี มันสร้างไฟล์โอเค บางทีคุณอาจไม่มีสิทธิ์ของผู้ดูแลระบบ?
dcp

2
@stenci ลิงก์ superuser นั้นยอดเยี่ยม คุณควรโพสต์มันเป็นคำตอบ
เดนิส Skidmore

@DeniseSkidmore ขอบคุณฉันเพิ่มคำตอบ มันลึกและผู้คนจะอ่านความคิดเห็นของฉันกับคำตอบนี้มากกว่าคำตอบของฉัน แต่ตอนนี้มันอยู่ที่นั่น
stenci

67

Windows ไม่มีtouchคำสั่งในตัว

คุณสามารถใช้รุ่นสาธารณะใด ๆ ที่มีอยู่หรือคุณสามารถใช้รุ่นของคุณเอง บันทึกรหัสนี้touch.cmdและวางไว้ที่ใดที่หนึ่งในเส้นทางของคุณ

@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

มันจะวนซ้ำในรายการอาร์กิวเมนต์และสำหรับแต่ละองค์ประกอบหากมีอยู่ให้อัปเดตการประทับเวลาไฟล์มิฉะนั้นให้สร้างขึ้นใหม่


คนนี้ดีที่สุดทำงานได้อย่างที่คาดไว้ ... โซลูชันอื่น ๆ ที่นี่ทำงานได้ แต่ฝากข้อความเตือน / ข้อผิดพลาด IDK ถ้าเป็นเอกสิทธิ์ของฉัน
Shakil

35

คุณสามารถใช้คำสั่งนี้: ECHO >> filename.txt

มันจะสร้างไฟล์ที่มีนามสกุลที่กำหนดในโฟลเดอร์ปัจจุบัน

UPDATE:

สำหรับการใช้ไฟล์เปล่า: คัดลอก NUL filename.txt


8
ได้ดียิ่งขึ้นtype NUL > filename(สร้างไฟล์ 0 bytes)
krzemian

24
เช่นเดียวกับการสัมผัสไฟล์จะไม่เขียนทับไฟล์หากมีอยู่:type NUL >> filename
henon

3
นี่เป็นวิธีที่ยอดเยี่ยมในการเพิ่ม "เปิด ECHO" ไปยังไฟล์ของคุณ
ripvlan

4
สิ่งนี้จะไม่อัปเดตการประทับเวลาของไฟล์ที่มีอยู่
เดนิส Skidmore

1
ฉันคิดว่า Denise Skidmore กำลังตอบสนองต่อ henon ไม่ใช่ OP (ฉันสองความคิดเห็นของเธอ.)
Keith Russell

28

คำตอบนั้นผิดจะใช้งานได้เมื่อไม่มีไฟล์อยู่เท่านั้น หากไฟล์มีอยู่โดยใช้ตัวแรกไม่ทำอะไรเลยตัวที่สองจะเพิ่มบรรทัดที่ท้ายไฟล์

คำตอบที่ถูกต้องคือ:

copy /b filename.ext +,,

ฉันพบมันที่นี่: /superuser/10426/windows-equivalent-of-the-linux-command-touch/764721#764721


1
คำตอบนี้ไม่ทำงานเมื่อไม่มีไฟล์อยู่ (CMD สร้างข้อผิดพลาด)
Keith Russell

15

ฉันประหลาดใจที่คำตอบที่นี่ผิดเพียงใด การไม่มีอะไรสะท้อนลงในไฟล์จะเป็นการเติมไฟล์ด้วยสิ่งที่ชอบECHO is ONและการพยายามที่จะสะท้อน$nulเป็นไฟล์จะถูกวาง$nulลงในไฟล์อย่างแท้จริง นอกจากนี้สำหรับ PowerShell การสะท้อน$nullลงในไฟล์จะไม่สร้างไฟล์ 0kb จริง ๆ แต่มีบางอย่างที่เข้ารหัสUCS-2 LE BOMซึ่งอาจยุ่งเหยิงหากคุณต้องการให้แน่ใจว่าไฟล์ของคุณไม่มีเครื่องหมายคำสั่งแบบไบต์

หลังจากทดสอบคำตอบทั้งหมดที่นี่และอ้างอิงบางคำที่คล้ายกันฉันสามารถรับประกันได้ว่าสิ่งเหล่านี้จะได้ผลต่อคอนโซลเชลล์ เพียงแค่เปลี่ยนFileName.FileExtensionให้เต็มหรือญาติเส้นทางของไฟล์ที่คุณต้องการtouch; ขอบคุณKeith RussellสำหรับการCOPY NUL FILE.EXTอัปเดต:

CMD พร้อมอัปเดตการประทับเวลา

copy NUL FileName.FileExtension

สิ่งนี้จะสร้างไฟล์ใหม่ชื่ออะไรก็ตามที่คุณวางไว้แทนที่จะFileName.FileExtensionมีขนาด 0 ไบต์ หากไฟล์มีอยู่แล้วโดยทั่วไปจะคัดลอกตัวเองเพื่ออัปเดตการประทับเวลา ฉันจะบอกว่านี่เป็นวิธีการแก้ปัญหามากกว่าฟังก์ชั่น 1: 1 ด้วยtouchแต่ฉันไม่รู้เครื่องมือในตัวสำหรับ CMD ที่สามารถอัปเดตการประทับเวลาของไฟล์ได้โดยไม่ต้องเปลี่ยนเนื้อหาอื่นใด

CMD ไม่มีอัปเดตการประทับเวลา

if not exist FileName.FileExtension copy NUL FileName.FileExtension

Powershell w / Timestamp อัพเดท

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

ใช่มันจะทำงานในคอนโซลเป็นซับเดียว ไม่ต้องการวางไว้ในไฟล์สคริปต์ PowerShell

PowerShell อัพเดตโดยไม่ระบุเวลา

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


1
เกี่ยวกับสถานการณ์ที่มีไฟล์อยู่และคุณต้องการอัพเดตการประทับเวลาการแก้ไขเป็นเวลาปัจจุบัน ฉันไม่เห็นว่าตัวอย่างเหล่านี้บรรลุเป้าหมายอย่างไร
RoG

2
การสังเกตที่ยอดเยี่ยม RoG! ฉันได้อัปเดตคำตอบเพื่อแก้ไขปัญหานี้แล้ว :)
kayleeFrye_onDeck

นี่คือคำตอบที่ดีที่สุด อย่างไรก็ตามฉันยังคงปรับปรุงมันโดยแทนที่fsutil file CreateNew FileName.FileExtension 0ด้วยcopy NUL Filename.FileExtensionเนื่องจากหลังสั้นกว่าและทำสิ่งเดียวกัน
Keith Russell

@KeithRussell IIRC มีเหตุผลเฉพาะผมไม่ได้ใช้copyมากกว่าfsutilแต่จะได้รับในขณะที่ ... ผมค่อนข้างมั่นใจว่าเป็นวิธีที่ผมยังเรียนรู้เกี่ยวกับfsutilฮ่าฮ่า! ฉันจะพยายามหาสาเหตุว่าทำไม ...
kayleeFrye_onDeck

1
แม้ว่าพวกเขาจะทำตัวเหมือนกัน แต่ฉันคิดว่ามันเร็วเกินไปสำหรับฉันที่จะบอกว่าดีกว่าโดยไม่มีการทดสอบความเร็ว
Keith Russell

14

ใช้คำสั่งต่อไปนี้บนบรรทัดคำสั่งของคุณ:

fsutil file createnew filename  requiredSize

ข้อมูลพารามิเตอร์ดังต่อไปนี้:

fsutil - ยูทิลิตี้ระบบไฟล์ (ปฏิบัติการที่คุณกำลังเรียกใช้)

ไฟล์ - เรียกการกระทำของไฟล์

createnew - การดำเนินการที่จะดำเนินการ (สร้างไฟล์ใหม่)

ชื่อไฟล์ - จะเป็นชื่อไฟล์อย่างแท้จริง

requiredSize - จะจัดสรรขนาดไฟล์เป็นไบต์ในไฟล์ที่สร้างขึ้น


2
คำอธิบายบางอย่างจำเป็นสำหรับสิ่งนี้เพื่อพิจารณาว่าเป็นคำตอบที่ดี ยังไม่ชัดเจนว่าคำห้าคำนี้หมายถึงอะไร
jfriend00

1
ทำงานได้สำหรับฉัน ... สิ่งที่ต้องการขนาดเป็นเรื่องแปลกแม้ว่า ... คำสั่งเพียงเติมไฟล์ใหม่ของคุณด้วยหลายพันNULL... แปลก ... ดังนั้นเพียงแค่ใช้ 0 ... สร้างข้อผิดพลาดถ้าคุณข้ามขนาดที่ต้องการ .. .
dsdsdsdsd

1
commnad นี้ต้องการสิทธิ์ของผู้ดูแลระบบ :(
ADJ

1
แตะยังอัปเดตการประทับเวลาของไฟล์ที่มีอยู่ไม่เพียง แต่สร้างไฟล์ใหม่
เดนิส Skidmore

1
การสัมผัสเป็นวิธีที่รวดเร็วในการทำมันใกล้เคียงกับเสียงก้องหรือประเภทฉันเดาว่าแม้ว่านี่จะเป็นเครื่องมือที่มีประโยชน์มากสำหรับการเขียนสคริปต์และใช้งานอย่างกว้างขวางใน WS16 ยกนิ้ว! docs.microsoft.com/en-us/windows-server/administr/…
อลัน

10

บน windows Power Shell คุณสามารถใช้คำสั่งต่อไปนี้:

New-Item <filename.extension>

หรือ

New-Item <filename.extension> -type file

หมายเหตุ: ใหม่รายการสามารถถูกแทนที่ด้วยนามแฝงของพรรณี


1
นี่คือคำตอบที่แท้จริงในโลก Windows ปัจจุบันที่ PowerShell เป็นโปรแกรมเชลล์คำสั่งเริ่มต้น
RBT

ไม่แน่ใจว่าคุณหมายถึง Windows อะไรฉันเพิ่งติดตั้ง Windows 10 ใหม่และ Powershell ไม่ใช่เชลล์เริ่มต้นแน่นอน 'New-Item' is not recognized as an internal or external command
user5359531

8

คุณสามารถจำลองการทำงานของการสัมผัสด้วยคำสั่งต่อไปนี้:

$>>filename

สิ่งนี้คือความพยายามในการเรียกใช้งานโปรแกรมที่เรียกว่า$แต่ถ้า$ไม่มีอยู่ (หรือไม่ใช่ปฏิบัติการที่สร้างเอาต์พุต) ดังนั้นจะไม่มีการสร้างเอาต์พุต เป็นหลักแฮ็คในการทำงานอย่างไรก็ตามคุณจะได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้:

ไม่รู้จัก '$' เป็นคำสั่งภายในหรือภายนอก, โปรแกรมที่ทำงานได้หรือไฟล์แบตช์

หากคุณไม่ต้องการข้อความแสดงข้อผิดพลาดคุณสามารถทำหนึ่งในสองสิ่งต่อไปนี้:

type nul >> filename

หรือ:

$>>filename 2>nul

typeคำสั่งพยายามที่จะแสดงเนื้อหาของ NUL ซึ่งไม่ทำอะไรเลย แต่กลับ EOF (จุดสิ้นสุดของแฟ้ม) เมื่ออ่าน

2>nulส่ง error-output (output 2) ไปที่ nul (ซึ่งจะละเว้นอินพุตทั้งหมดเมื่อเขียนไป) เห็นได้ชัดว่าคำสั่งที่สอง (พร้อม2>nul) ถูกทำซ้ำโดยtypeคำสั่งเนื่องจากมันพิมพ์ได้เร็วกว่า แต่อย่างน้อยตอนนี้คุณมีตัวเลือกและความรู้


สิ่งนี้ยอดเยี่ยม แต่ตั้งค่า%ERRORLEVEL%เป็นไม่เป็นศูนย์เสมอ คุณสามารถแก้ไขปัญหานั้นได้ด้วยการผนวก noop || cd.แต่สิ่งนี้จะตั้งค่าข้อผิดพลาดเป็น 0 เสมอซึ่งอาจไม่ใช่สิ่งที่คุณต้องการหาก "touch" ล้มเหลว
Keith Russell

5

ไม่มีคำสั่ง - ค่าtypeมิได้echo- เป็นสิ่งจำเป็นที่จะเลียนแบบคำสั่งยูนิกซ์ / Mac OS X ของ 'สัมผัส' ในขั้ว Windows PowerShell เพียงใช้ชวเลขต่อไปนี้:

$null > filename

วิธีนี้จะสร้างไฟล์ว่างที่ชื่อว่า 'ชื่อไฟล์' ที่ตำแหน่งปัจจุบันของคุณ ใช้นามสกุลไฟล์ที่คุณอาจต้องการเช่น '.txt'

ที่มา: /superuser/502374/equivalent-of-linux-touch-to-create-an-empty-file-with-powershell (ดูความคิดเห็น)


1
ดูเหมือนว่าคุณจะพลาดecho
sabithpocker

@sabithpocker ใน Windows cmd, $ null ไม่มีอยู่และเนื่องจากไม่มีอยู่จึงไม่มีเอาต์พุตใด ๆ คุณ$null > filenameส่งออกที่ว่างเปล่าไปยังชื่อไฟล์ (ถ้าคุณจับลอยของฉัน)
Keldon Alleyne

1
@sabithpocker ใน Windows PowerShell ให้มันทำงานได้โดยไม่ต้องechoในขั้วบรรทัดคำสั่งมาตรฐาน (cmd) echoที่คุณต้องการ ขอโทษสำหรับความสับสน.
Oliver Schafeld

@OliverSchafeld และ Keldon ขอบคุณสำหรับคำอธิบาย
sabithpocker

1
เพิ่ม BOM ลงในไฟล์
kayleeFrye_onDeck

3

คุณยังสามารถใช้คัดลอก [ชื่อไฟล์]ในหน้าต่างคำสั่งของ 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.

สิ่งนี้จะสร้างไฟล์ที่มีชื่อyourfile.txtในไดเรกทอรีท้องถิ่น


3

ดังกล่าว

echo >> index.html

มันสามารถเป็นไฟล์ใดก็ได้โดยมีนามสกุลใดก็ได้

notepad index.html

นี่จะเป็นการเปิดไฟล์ของคุณในโปรแกรมแก้ไขแผ่นจดบันทึก


3

ฉันใช้cmder(โปรแกรมจำลองบรรทัดคำสั่ง)

จะช่วยให้คุณเรียกใช้คำสั่ง Linux ทั้งหมดภายในเครื่อง Windows

สามารถดาวน์โหลดได้จากhttps://cmder.net/

ฉันชอบมันมาก


1
เกิดอะไรขึ้นกับคำเตือน "ผู้เผยแพร่ที่ไม่รู้จัก" เมื่อฉันพยายามเปิด Cmder ใน win10 คนเกียจคร้าน
Chris22

2

สมมติว่าไฟล์นั้นมีอยู่และคุณเพียงแค่ต้องอัปเดตการประทับเวลา

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

2

จาก Terminal ของ Visual Code Studio บน Windows 10 นี่คือสิ่งที่ฉันสามารถสร้างไฟล์ใหม่ได้:

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

1

หากคุณติดตั้งCygwinไว้ในพีซีของคุณคุณสามารถใช้ไฟล์ปฏิบัติการที่ให้มาสำหรับการสัมผัส (เช่นผ่านทางพรอมต์คำสั่งของ windows):

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


-1

ใช่คุณสามารถใช้ Node for Touch ได้ฉันใช้และทำงานได้ดีใน windows Cmd หรือ gitbash

ป้อนคำอธิบายรูปภาพที่นี่


ฉันไม่ได้ลงคะแนนในที่นี้ แต่ฉันจะอธิบายว่าทำไมมันน่าจะเป็น คำถามนี้ถูกติดแท็กด้วย[cmd]และนั่นก็หมายความว่า OP ต้องการคำตอบที่ทำงานนอกกรอบสำหรับ CMD ซึ่งหมายความว่าไม่มีโปรแกรมอรรถประโยชน์บรรทัดคำสั่งที่ไม่ได้บรรจุด้วยการติดตั้ง Windows เริ่มต้น ที่จะยกเว้นภาษาสคริปต์แทบทุกภาษาแม้แต่ภาษาสคริปต์ Windows ในตัวเช่น CScript, WScript และ PowerShell ประเด็นไม่ได้อยู่ที่การทำงานใน CMD env แต่เป็นไปได้สำหรับทุกคนที่เข้าถึง CMD ไม่รวมถึงปัญหาการอนุญาต
kayleeFrye_onDeck
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.