Windows еквівалент "touch" (тобто спосіб node.js для створення index.html)


196

На машині Windows я отримую цю помилку

'touch' не розпізнається як внутрішня чи зовнішня команда, функціонуюча програма чи пакетний файл.

коли я виконую вказівки робити:

touch index.html app.js style.css

Чи існує вікно, еквівалент використання 'touch'? Чи потрібно мені створювати ці файли вручну (і змінювати їх, щоб змінити часову позначку) для того, щоб реалізувати такий тип команди? Це не здається ... вузол-іш ...


5
А простий пошук Google показує вам безліч вікон реалізацій touch. Інша дискусія тут: superuser.com/questions/10426/… і бібліотека Cygwin є загальним набором інструментів команд Unix для Windows.
jfriend00

4
Можливий повтор цього питання: stackoverflow.com/questions/26343974/…
Пластиковий осередок


1
Будь ласка, перейдіть до відповіді Raghuveer безпосередньо, якщо ви приземлилися тут, використовуючи PowerShell.
RBT

Відповіді:


279

у вікні cmd:

type nul > your_file.txt

Це створить 0 байт у вашому файлі_file.txt.

Ще один спосіб зробити це за допомогою команди echo :

echo.> your_file.txt

відлуння. - створить файл з одним порожнім рядком у ньому.

Відредаговано 01.04.2019:

Якщо вам потрібно зберегти вміст файлу, використовуйте >> замість>

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

Приклад

type nul >> your_file.txt

Відредаговано 2020-04-07

Ви також можете використовувати команду виклику .

Викликає одну пакетну програму від іншої, не зупиняючи батьківську пакетну програму. Команда виклику приймає мітки як ціль виклику.

Приклад:

call >> your_file.txt

2
у Windows 7 перший варіант створює страшне діалогове вікно, а потім ви бачите access deniedна консолі. Другий варіант працює просто чудово!
Розшифровано

13
Відповідь неправильна, вона працює лише тоді, коли файл не існує. Якщо файл існує, використання >>першого не робить нічого, другий додає рядок у кінці файлу. Правильна відповідь - superuser.com/questions/10426/…
stenci

3
@stenci - я просто спробував це на неіснуючому файлі, і він працював чудово. Це створило файл добре. Можливо, вам не вистачає прав адміністратора?
dcp

2
@stenci, що суперпопулярне посилання є чудовим. Ви повинні опублікувати це як відповідь.
Деніз Скідмор

@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, якщо це виключно для мене.
Шакіль

35

Ви можете використовувати цю команду: ECHO >> filename.txt

він створить файл із заданим розширенням у поточній папці.

ОНОВЛЕННЯ:

для використання порожнього файлу: скопіюйте NUL filename.txt


8
Ще краще type NUL > filename(створює файл 0 байтів)
krzemian

23
Як і дотик, це файл не перезапише, якщо він існує:type NUL >> filename
henon,

3
Це прекрасний спосіб додати "ECHO увімкнено". у ваш файл.
ripvlan

4
це не оновлює часову позначку існуючих файлів.
Деніз Скідмор

1
Я думаю, що Деніз Скідмор відповідає на хенон, а не на ОП. (Я другий її коментар.)
Кіт Рассел

28

Відповідь неправильна, вона працює лише тоді, коли файл не існує. Якщо файл існує, використання першого не робить нічого, другий додає рядок у кінці файлу.

Правильна відповідь:

copy /b filename.ext +,,

Я знайшов це тут: /superuser/10426/windows-equivalent-of-the-linux-command-touch/764721#764721


1
Ця відповідь не працює, коли файл не існує. (CMD видає помилку.)
Кіт Рассел

15

Я здивований, скільки відповідей тут просто невірно . Ехо, що нічого не буде у файлі, заповнить файл чимось на кшталт ECHO is ON, а спроба відлуння $nulу файл буквально розміститься $nulу файлі. Додатково для PowerShell, повторення $nullу файл насправді не зробить 0kb файл, але щось закодоване як UCS-2 LE BOM, що може стати безладним, якщо вам потрібно переконатися, що ваші файли не мають позначки порядку байтів.

Після тестування всіх відповідей тут і посилаючись на деякі подібні, я можу гарантувати, що вони працюватимуть на оболонці консолі. Просто змініть FileName.FileExtensionповний або відносний шлях до файлу, який ви хочете touch; дякую Кіту Расселу за COPY NUL FILE.EXTоновлення:

Оновлення CMD w / Timestamp

copy NUL FileName.FileExtension

Це створить новий файл з ім'ям, що ви розмістили, замість FileName.FileExtensionрозміру 0 байт. Якщо файл вже існує, він в основному копіює себе на місці для оновлення часової позначки. Я б сказав, що це більше обхід, ніж функціонал 1: 1, touchале я не знаю жодних вбудованих інструментів для CMD, які можуть виконати оновлення часової позначки файлу без зміни будь-якого іншого вмісту.

CMD без оновлення Timestamp

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, оскільки останній коротший і робить те саме.
Кіт Рассел

@KeithRussell IIRC була конкретна причина , я не використовував copyбільш , fsutilале це було якесь - то час ... Я впевнений , що, як я навіть дізнався про fsutilха - ха! Я спробую розібратися, чому ...
kayleeFrye_onDeck

1
Навіть якщо вони поводяться так само, я гадаю, що для мене передчасно говорити, що краще, без тестування швидкості.
Кіт Расселл

14

Використовуйте таку команду у вашому командному рядку:

fsutil file createnew filename  requiredSize

Інформація про параметри:

fsutil - Утиліта файлової системи (виконуваний файл)

файл - запускає дію з файлом

createnew - дія, яку потрібно виконати (створити новий файл)

ім'я файлу - це було б буквально назва файлу

RequSize - виділить розмір файлу в байтах у створеному файлі


2
Дещо пояснення потрібно, щоб це вважалося гідною відповіддю. Незрозуміло, що означають ці п’ять слів.
jfriend00

1
працював для мене ... річ вимагаючого розміру дивна, хоча ... команда просто заповнює ваш новий файл тисячами NULLs ... дивно ... тому просто використовуйте 0 ... створює помилку, якщо ви пропустите потрібний розмір .. .
dsdsdsdsd

1
цьому комунаду потрібні адміністративні права :(
ADJ

1
торкніться також оновлення часової позначки для існуючих файлів, а не просто створює нові файли.
Деніз Скідмор

1
дотик - це швидкий спосіб зробити це, найближчим до нього було б ехо або тип, я думаю, хоча це дуже зручний інструмент для сценаріїв і широко використовується в WS16, великі пальці! docs.microsoft.com/en-us/windows-server/administration/…
Алан

10

У Windows Power Shell можна використовувати таку команду:

New-Item <filename.extension>

або

New-Item <filename.extension> -type file

Примітка. Новий елемент можна замінити його псевдонімом ni


1
Це справжня відповідь у сучасному світі Windows, де PowerShell є програмою командної оболонки за замовчуванням.
RBT

не впевнений, про яку Windows ви маєте на увазі, я щойно встановив свіжу Windows 10, і Powershell точно не є оболонкою за замовчуванням. 'New-Item' is not recognized as an internal or external command
користувач5359531

8

Ви можете скопіювати функціональність дотику за допомогою наступної команди:

$>>filename

Це робить спроби виконати програму, яку називають $, але якщо $вона не існує (або не є виконавчим файлом, який виробляє вихід), то жоден вихід не виробляється. По суті це злом на функціональність, проте ви отримаєте таке повідомлення про помилку:

'$' не розпізнається як внутрішня чи зовнішня команда, функціонуюча програма чи пакетний файл.

Якщо ви не хочете повідомлення про помилку, ви можете зробити одне з двох:

type nul >> filename

Або:

$>>filename 2>nul

У typeкоманді намагається відобразити вміст NUL, який не робить нічого , крім , повертає EOF (кінець файлу) при читанні.

2>nulпосилає вихідну помилку (вихід 2) на nul (яка ігнорує весь вхід при записі). Очевидно, що друга команда (з 2>nul) стає надмірною typeкомандою, оскільки вона швидше набирається. Але принаймні у вас зараз є можливість і знання.


Це чудово, але він встановлює %ERRORLEVEL%не нуль завжди. Ви можете виправити цю проблему, додавши noop || cd., але це завжди встановлює помилку на 0, що може бути не тим, що потрібно, якщо "touch" не вдасться.
Кіт Рассел

5

Жодна команда - ні typeні echo- не потрібна для імітації команди "touch" Unix / Mac OS X в терміналі Powershell Windows. Просто скористайтеся такою стенограмою:

$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. Вибачте за непорозуміння.
Олівер Шафельд

@OliverSchafeld та Keldon Дякую за пояснення.
sabithpocker

1
Це додає BOM до файлу.
kayleeFrye_onDeck

3

Ви також можете скопіювати con [ім'я файлу] у вікні команди 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

З терміналу 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 для Touch, я просто використовую це і його все працює в Windows Cmd або gitbash

введіть тут опис зображення


Я не спростовував цього, але поясню, чому це, мабуть, було. Це питання позначено тегом [cmd], і це означає, що ОП хоче відповіді, яка працює нестандартно для CMD, тобто ніяких утиліт командного рядка, які не упаковані з встановленою системою Windows за замовчуванням. Це виключає практично всі мови сценаріїв, навіть вбудовані мови сценаріїв Windows, такі як CScript, WScript та PowerShell. Справа не в тому, що він працює в CMD env, а в тому, що це можливо для всіх, хто має доступ до CMD, не враховуючи проблем з дозволами.
kayleeFrye_onDeck
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.