Setara dengan Windows 'touch' (yaitu cara node.js untuk membuat index.html)

196

Pada mesin windows saya mendapatkan kesalahan ini

'touch' tidak dikenali sebagai perintah internal atau eksternal, program yang dapat dijalankan, atau file batch.

ketika saya mengikuti instruksi yang harus dilakukan:

touch index.html app.js style.css

Apakah ada jendela yang setara dengan menggunakan 'sentuh'? Apakah saya perlu membuat file-file ini dengan tangan (dan memodifikasinya untuk mengubah timestamp) untuk mengimplementasikan perintah semacam ini? Tampaknya tidak terlalu ... simpul-ish ...

CuriousAboutNode
sumber
5
Sebuah sederhana pencarian Google menunjukkan Anda banyak jendela implementasi touch. Diskusi lain di sini: superuser.com/questions/10426/… dan pustaka Cygwin adalah toolset umum dari perintah Unix pada Windows.
jfriend00
4
Kemungkinan Gandakan pertanyaan ini: stackoverflow.com/questions/26343974/...
Plastic Sturgeon
Kemungkinan duplikat dari Buat file dengan baris perintah di Node
phuclv
1
Silakan langsung ke jawaban Raghuveer secara langsung jika Anda mendarat di sini saat menggunakan PowerShell.
RBT

Jawaban:

279

dalam tipe jendela cmd:

type nul > your_file.txt

Ini akan membuat 0 byte di file your_file.txt.

Cara lain untuk melakukannya adalah dengan menggunakan perintah echo :

echo.> your_file.txt

gema. - akan membuat file dengan satu baris kosong di dalamnya.

Diedit pada 2019-04-01:

Jika Anda perlu mempertahankan konten file gunakan >> bukan>

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

Contoh

type nul >> your_file.txt

Diedit pada 2020-04-07

Anda juga dapat menggunakan perintah panggilan .

Panggilan satu program batch dari yang lain tanpa menghentikan program batch induk. Perintah panggilan menerima label sebagai target panggilan.

Contoh:

call >> your_file.txt
Vlad Bezden
sumber
2
pada windows 7 opsi pertama menghasilkan dialog yang menakutkan, dan kemudian Anda lihat access denieddi konsol. Opsi kedua berfungsi dengan baik!
Decoded
13
Jawabannya salah, itu hanya berfungsi ketika file tidak ada. Jika file ada, menggunakan >>yang pertama tidak melakukan apa-apa, yang kedua menambahkan baris di akhir file. Jawaban yang benar adalah superuser.com/questions/10426/…
stenci
3
@stenci - Saya baru mencobanya pada file yang tidak ada dan berfungsi dengan baik. Itu membuat file ok. Mungkin Anda tidak memiliki hak admin?
dcp
2
@stenci bahwa tautan pengguna super hebat. Anda harus mempostingnya sebagai jawaban.
Denise Skidmore
@DeniseSkidmore Terima kasih, saya menambahkan jawabannya. Sangat dalam dan orang-orang akan lebih cenderung membaca komentar saya untuk jawaban ini daripada jawaban saya, tetapi sekarang sudah ada di sana.
stenci
67

Windows tidak termasuk touch perintah.

Anda dapat menggunakan salah satu versi publik yang tersedia atau Anda dapat menggunakan versi Anda sendiri. Simpan kode ini sebagai touch.cmddan letakkan di suatu tempat di jalur Anda

@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

Ini akan mengulangi daftar argumennya, dan untuk setiap elemen jika ada, perbarui cap waktu file, jika tidak, buatlah.

MC ND
sumber
ini yang terbaik, bekerja persis seperti yang diharapkan ... solusi lain di sini berfungsi tetapi tinggalkan teks peringatan / kesalahan, IDK jika itu eksklusif bagi saya.
Shakil
35

Anda dapat menggunakan perintah ini: ECHO >> filename.txt

itu akan membuat file dengan ekstensi yang diberikan di folder saat ini.

MEMPERBARUI:

untuk penggunaan file kosong: salin NUL filename.txt

Aaron Clark
sumber
8
Bahkan lebih baik type NUL > filename(membuat file 0 byte)
krzemian
24
Seperti halnya sentuhan, ini tidak akan menimpa file jika ada:type NUL >> filename
henon
3
Ini cara yang bagus untuk menambahkan "ECHO aktif." ke file Anda.
ripvlan
4
ini tidak memperbarui timestamp file yang ada.
Denise Skidmore
1
Saya pikir Denise Skidmore merespons henon, bukan OP. (Saya beri komentar kedua.)
Keith Russell
28

Jawabannya salah, itu hanya berfungsi ketika file tidak ada. Jika file ada, menggunakan yang pertama tidak melakukan apa-apa, yang kedua menambahkan baris di akhir file.

Jawaban yang benar adalah:

copy /b filename.ext +,,

Saya menemukannya di sini: /superuser/10426/windows-equivalent-of-the-linux-command-touch/764721#764721

stenci
sumber
1
Jawaban ini tidak berfungsi saat file tidak ada. (CMD menghasilkan kesalahan.)
Keith Russell
15

Saya terkejut berapa banyak jawaban di sini yang salah . Menggema apa pun ke dalam file akan mengisi file dengan sesuatu seperti ECHO is ON, dan mencoba untuk menggema $nulke dalam file akan benar-benar menempatkan $nulke dalam file. Selain itu untuk PowerShell, gema $nullke dalam file tidak akan benar-benar membuat file 0kb, tetapi sesuatu dikodekan sebagaiUCS-2 LE BOM , yang bisa berantakan jika Anda perlu memastikan file Anda tidak memiliki tanda urutan byte.

Setelah menguji semua jawaban di sini dan merujuk beberapa yang serupa, saya dapat menjamin ini akan bekerja per shell konsol. Cukup ubah FileName.FileExtensionpath lengkap atau relatif dari file yang Anda inginkan touch; terima kasih kepada Keith Russell untuk COPY NUL FILE.EXTpembaruan:

CMD dengan Pembaruan Timestamp

copy NUL FileName.FileExtension

Ini akan membuat file baru bernama apa pun yang Anda tempatkan alih-alih FileName.FileExtensiondengan ukuran 0 byte. Jika file sudah ada pada dasarnya itu akan menyalin dirinya sendiri di tempat untuk memperbarui timestamp. Saya akan mengatakan ini lebih dari solusi dengan fungsionalitas 1: 1 dengantouch tetapi saya tidak tahu ada alat bawaan untuk CMD yang dapat menyelesaikan memperbarui stempel waktu file tanpa mengubah konten lainnya.

CMD tanpa Pembaruan Timestamp

if not exist FileName.FileExtension copy NUL FileName.FileExtension

Powershell dengan Pembaruan Timestamp

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

Ya, itu akan bekerja di konsol sebagai satu-liner; tidak ada persyaratan untuk menempatkannya dalam file skrip PowerShell.

PowerShell tanpa Pembaruan Timestamp

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

kayleeFrye_onDeck
sumber
1
Bagaimana dengan situasi di mana file itu ada dan Anda ingin memperbarui timestamp modifikasinya ke waktu saat ini? Saya tidak melihat bagaimana contoh-contoh ini mencapai itu.
RoG
2
Pengamatan yang bagus, RoG! Saya telah memperbarui jawaban untuk mengatasi ini :)
kayleeFrye_onDeck
Ini jawaban terbaik. Namun, saya masih akan memperbaikinya dengan mengganti fsutil file CreateNew FileName.FileExtension 0dengan copy NUL Filename.FileExtension, karena yang terakhir ini lebih pendek dan melakukan hal yang sama.
Keith Russell
@KeithRussell IIRC ada alasan tertentu saya tidak menggunakan copylebih fsutiltapi sudah beberapa saat ... aku cukup yakin bahwa ini bagaimana saya bahkan belajar tentang fsutilhaha! Saya akan mencoba mencari tahu mengapa ...
kayleeFrye_onDeck
1
Bahkan jika mereka berperilaku sama, saya kira itu terlalu dini bagi saya untuk mengatakan satu lebih baik, tanpa pengujian kecepatan.
Keith Russell
14

Gunakan perintah berikut di baris perintah Anda:

fsutil file createnew filename  requiredSize

Info parameter sebagai berikut:

fsutil - Utilitas sistem file (executable yang Anda jalankan)

file - memicu tindakan file

createnew - tindakan untuk dilakukan (membuat file baru)

nama file - secara harfiah nama file

requiredSize - akan mengalokasikan ukuran file dalam byte di file yang dibuat

Ofer Haber
sumber
2
Diperlukan beberapa penjelasan agar ini dianggap sebagai jawaban yang layak. Tidak jelas apa arti lima kata ini.
jfriend00
1
bekerja untuk saya ... hal yang diperlukanSize adalah aneh meskipun ... perintah hanya mengisi file baru Anda dengan ribuan NULLs ... aneh ... jadi gunakan saja 0 ... menghasilkan kesalahan jika Anda melewatkan diperlukanSize .. .
dsdsdsdsd
1
commnad ini membutuhkan admin privilege :(
ADJ
1
touch juga memperbarui stempel waktu pada file yang ada, tidak hanya membuat file baru.
Denise Skidmore
1
Sentuhan adalah cara cepat untuk melakukannya, paling dekat dengan itu adalah gema atau tipe, saya kira, meskipun ini adalah alat yang sangat berguna untuk scripting dan sangat digunakan di WS16, acungan jempol! docs.microsoft.com/en-us/windows-server/administration/…
Alan
10

Di windows Power Shell, Anda dapat menggunakan perintah berikut:

New-Item <filename.extension>

atau

New-Item <filename.extension> -type file

Catatan: Baru-Barang bisa diganti dengan alias-nya ni

Raghuveer
sumber
1
Ini adalah jawaban nyata di dunia Windows saat ini di mana PowerShell adalah program shell perintah default.
RBT
tidak yakin apa yang dimaksud Windows, saya baru saja menginstal Windows 10 baru dan Powershell jelas bukan shell default. 'New-Item' is not recognized as an internal or external command
user5359531
8

Anda dapat meniru fungsi sentuhan dengan perintah berikut:

$>>filename

Apa yang dilakukan adalah upaya untuk menjalankan program yang disebut $, tetapi jika $tidak ada (atau tidak dapat dieksekusi yang menghasilkan output) maka tidak ada output yang dihasilkan olehnya. Ini pada dasarnya adalah peretasan pada fungsionalitas, namun Anda akan mendapatkan pesan kesalahan berikut:

'$' tidak dikenali sebagai perintah internal atau eksternal, program yang dapat dijalankan, atau file batch.

Jika Anda tidak ingin pesan kesalahan maka Anda dapat melakukan salah satu dari dua hal:

type nul >> filename

Atau:

$>>filename 2>nul

The typemencoba perintah untuk menampilkan isi nul, yang tidak apa-apa tetapi kembali EOF (akhir file) saat membaca.

2>nulmengirimkan error-output (output 2) ke nul (yang mengabaikan semua input saat ditulis ke). Jelas perintah kedua (dengan 2>nul) dibuat berlebihan oleh typeperintah karena lebih cepat untuk mengetik. Tetapi setidaknya Anda sekarang memiliki pilihan dan pengetahuan.

Keldon Alleyne
sumber
Ini bagus, tetapi %ERRORLEVEL%selalu non-nol. Anda dapat memperbaiki masalah itu dengan menambahkan noop || cd., tetapi ini selalu mengatur kesalahan ke 0, yang mungkin tidak sesuai dengan yang Anda inginkan jika "sentuhan" gagal.
Keith Russell
5

Tidak ada perintah - tidak typejuga echo- diperlukan untuk meniru perintah 'sentuh' Unix / Mac OS X di terminal Windows Powershell. Cukup gunakan singkatan berikut:

$null > filename

Ini akan membuat file kosong bernama 'nama file' di lokasi Anda saat ini. Gunakan ekstensi nama file apa pun yang mungkin Anda perlukan, misalnya '.txt'.

Sumber: /superuser/502374/equivalent-of-linux-touch-to-create-an-empty-file-with-powershell (lihat komentar)

Oliver Schafeld
sumber
1
sepertinya Anda ketinggalanecho
sabithpocker
@sabithpocker di Windows cmd, $ null tidak ada, dan karena tidak ada, tidak menghasilkan output apa pun. Anda $null > filenamemengirimkan output kosong ke nama file (jika Anda mengetahui maksud saya).
Keldon Alleyne
1
@ saabithpocker Di Windows Powershell berfungsi tanpa echoDi terminal baris perintah standar (cmd) yang Anda butuhkan echo. Maaf bila membingungkan.
Oliver Schafeld
@OliverSchafeld dan Keldon Terima kasih atas penjelasannya.
sabithpocker
1
Ini menambahkan BOM ke file.
kayleeFrye_onDeck
3

Anda juga dapat menggunakan copy con [nama file] di jendela perintah 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.

Ini akan membuat file bernama yourfile.txtdi direktori lokal.

delliottg
sumber
3

seperti yg disebutkan

echo >> index.html

bisa berupa file apa saja, dengan ekstensi apa pun lakukan

notepad index.html

ini akan membuka file Anda di editor notepad

Boris
sumber
3

Saya menggunakan cmder(emulator baris perintah)

Ini memungkinkan Anda untuk menjalankan semua perintah Linux di dalam mesin Windows.

Itu dapat diunduh dari https://cmder.net/

Aku benar-benar menyukainya

pengguna1880531
sumber
1
ada apa dengan peringatan "Penerbit Tidak Diketahui" ketika saya mencoba membuka Cmder di win10? Kekecewaan.
Chris22
2

Dengan asumsi file ada dan Anda hanya perlu memperbarui cap waktu.

type test.c > test.c.bkp && type test.c.bkp > test.c && del test.c.bkp
Anoop Kumar Narayanan
sumber
2

Dari Terminal Visual Code Studio pada Windows 10, inilah yang berhasil bagi saya untuk membuat file baru:

type > hello.js
echo > orange.js
ni > peach.js
eimn
sumber
1

Jika Anda telah menginstal Cygwin di PC Anda, Anda dapat menggunakan executable yang disediakan untuk sentuhan (juga melalui command prompt windows):

C:\cygwin64\bin\touch.exe <file_path>
Uri Ziv
sumber
-1

Mudah, contohnya dengan file txt

echo $null >> filename.txt
Thiago Maciel
sumber
Menambahkan $nullke file.
Tomáš Zato - Reinstate Monica
-1

Ya, Anda dapat menggunakan Node for Touch. Saya hanya menggunakannya dan berfungsi baik di windows Cmd atau gitbash

masukkan deskripsi gambar di sini

Asad Iftikhar
sumber
Saya tidak mengundurkan diri tetapi saya akan menjelaskan mengapa itu mungkin. Pertanyaan ini ditandai [cmd], dan itu menyiratkan bahwa OP menginginkan jawaban yang sesuai untuk CMD, artinya tidak ada utilitas baris perintah yang tidak dipaket dengan instalasi Windows default. Itu akan mengecualikan hampir semua bahasa skrip, bahkan bahasa skrip Windows bawaan seperti CScript, WScript, dan PowerShell. Intinya bukan bahwa ia bekerja di CMD env, tetapi itu mungkin bagi siapa pun yang memiliki akses ke CMD, tidak termasuk masalah izin.
kayleeFrye_onDeck