Windows-эквивалент 'touch' (то есть способ node.js для создания index.html)
На машине с Windows я получаю эту ошибку
"touch" не распознается как внутренняя или внешняя команда, работающая программа или командный файл.
когда я следую инструкциям:
touch index.html app.js style.css
Есть ли в Windows эквивалент использования "touch"? Нужно ли создавать эти файлы вручную (и изменять их для изменения метки времени) для реализации такого рода команд? Это не кажется очень... нод...
27 ответов
В окне типа cmd:
type nul > your_file.txt
Это создаст 0 байтов в файле your_file.txt.
Другой способ сделать это - использовать команду echo:
echo.> your_file.txt
эхо. - создаст файл с одной пустой строкой в нем.
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
Он будет перебирать список аргументов, и для каждого элемента, если он существует, обновлять временную метку файла, в противном случае создавать его.
Вы можете использовать эту команду: ECHO >> filename.txt
он создаст файл с заданным расширением в текущей папке.
ОБНОВИТЬ:
для пустого файла используйте: скопируйте NUL filename.txt
В Windows Power Shell вы можете использовать следующую команду:
New-Item <filename.extension>
или же
New-Item <filename.extension> -type file
Примечание. Новый элемент можно заменить его псевдонимом ni.
Ответ неправильный, он работает только тогда, когда файл не существует. Если файл существует, использование первого ничего не дает, второе добавляет строку в конец файла.
Правильный ответ:
copy /b filename.ext +,,
Я нашел это здесь: https://superuser.com/questions/10426/windows-equivalent-of-the-linux-command-touch/764721
Я удивлен, сколько ответов здесь просто неверно. Ничего не вставляя в файл, заполнит файл чем-то вроде ECHO is ON
и пытается повторить $nul
в файл буквально поместит $nul
в файл. Дополнительно для PowerShell, повторение $null
в файл на самом деле не сделать файл 0kb, но что-то закодировано как UCS-2 LE BOM
, который может запутаться, если вам нужно убедиться, что ваши файлы не имеют метки порядка следования байтов.
Протестировав все ответы здесь и сославшись на некоторые похожие, я могу гарантировать, что они будут работать для каждой консольной оболочки. Просто поменяй FileName.FileExtension
на полный или относительный путь к файлу, который вы хотите touch
:
CMD
if not exist FileName.FileExtension fsutil file CreateNew FileName.FileExtension 0
Это создаст новый файл с именем независимо от того, что вы поместили вместо FileName.FileExtension
длиной 0 байт. Он не будет ничего делать с этим файлом, если он уже существует, как touch
,
Powershell
if (!(Test-Path FileName.FileExtension -PathType Leaf)) {New-Item FileName.FileExtension -Type file}
Это имеет ту же функциональность, что и версия CMD. Он не будет связываться с существующим файлом и создаст совершенно новый пустой файл того, что вы решили использовать вместо FileName.FileExtension
, И да, он будет работать в консоли как однострочный; нет необходимости помещать его в файл сценария PowerShell.
Используйте следующую команду в командной строке:
fsutil file createnew filename requiredSize
Информация о параметрах следующая:
fsutil - утилита файловой системы (исполняемый файл, который вы запускаете)
файл - запускает действие файла
createnew - действие, которое нужно выполнить (создать новый файл)
имя файла - будет буквально имя файла
requiredSize - будет выделять размер файла в байтах в созданном файле
установить npm в вашу машину
запустите приведенную ниже команду в командной строке.
npm install touch-cli -g
теперь вы сможете использовать touch cmd.
Вы можете повторить функциональность касания с помощью следующей команды:
$>>filename
Что это делает, это пытается выполнить программу под названием $
, но если $
не существует (или не является исполняемым файлом, который производит вывод), то никакой вывод не производится им. По сути, это подделка функциональности, однако вы получите следующее сообщение об ошибке:
"$" не распознается как внутренняя или внешняя команда, работающая программа или пакетный файл.
Если вам не нужно сообщение об ошибке, вы можете сделать одно из двух:
type nul >> filename
Или же:
$>>filename 2>nul
type
Команда пытается отобразить содержимое nul, которое ничего не делает, но возвращает EOF (конец файла) при чтении.
2>nul
отправляет вывод ошибок (вывод 2) в nul (который игнорирует весь ввод при записи). Очевидно вторая команда (с 2>nul
) становится избыточным type
команда, так как это быстрее набрать. Но, по крайней мере, теперь у вас есть возможность и знания.
Используя PowerShell, введите:ni index.html
илиni style.css
илиni app.js
ni <filename>.<extension>
Как уже упоминалось
echo >> index.html
это может быть любой файл с любым расширением
notepad index.html
это откроет ваш файл в редакторе блокнота
Нет команды - ни type
ни echo
- необходим для эмуляции команды touch в Unix /Mac OS X в терминале Windows Powershell. Просто используйте следующие сокращения:
$null > filename
Это создаст пустой файл с именем "filename" в вашем текущем местоположении. Используйте любое расширение файла, которое вам может понадобиться, например, ".txt".
Источник: https://superuser.com/questions/502374/equivalent-of-linux-touch-to-create-an-empty-file-with-powershell (см. Комментарии)
Для очень простой версии
touch
который в основном использовался бы для создания 0-байтового файла в текущем каталоге, альтернативой было бы создание
touch.bat
файл и либо добавив его в
%Path%
или скопировав его в
C:\Windows\System32
каталог, например:
touch.bat
@echo off
powershell New-Item %* -ItemType file
Создание одного файла
C:\Users\YourName\Desktop> коснитесь a.txt Каталог: C:\Users\YourName\Desktop Режим LastWriteTime Длина Имя ---- ------------- ------ ---- -a---- 2020-10-14 22:28 0 a.txt
Создание нескольких файлов
C:\Users\YourName\Desktop> нажмите "b.txt,c.txt" Каталог: C:\Users\YourName\Desktop Режим LastWriteTime Длина Имя ---- ------------- ------ ---- -a---- 2020-10-14 22:52 0 b.txt -a---- 2020-10-14 22:52 0 c.txt
Также
- Работает как с PowerShell, так и с командной строкой.
- Работает с существующими подкаталогами.
- Не создает файл, если он уже существует:
Новый элемент: файл "C: \ Users \ YourName \ Desktop \ a.txt" уже существует.
- Для нескольких файлов создаются только несуществующие файлы.
- Принимает список имен файлов, разделенных запятыми, без пробелов или заключенный в кавычки, если пробелы необходимы:
C:\Users\YourName\Desktop>touch d.txt,e.txt,f.txt C:\Users\YourName\Desktop> нажмите "g.txt, 'имя с пробелами'"
Из терминала Visual Code Studio в Windows 10 у меня сработало следующее, чтобы создать новый файл:
type > hello.js
echo > orange.js
ni > peach.js
Как отмечает Raghuveer в своем ответе,
ni
это псевдоним PowerShell для
New-Item
, поэтому вы можете создавать файлы из командной строки PowerShell, используя
ni
вместо прикосновения.
Если вы предпочитаете вводить
touch
вместо
ni
, вы можете установить
touch
псевдоним PowerShell
New-Item
командлет.
Создание сенсорной команды в Windows PowerShell:
В командной строке PowerShell определите новый псевдоним.
Set-Alias -Name touch -Value New-Item
Теперь сенсорная команда работает почти так же, как вы ожидаете. Единственная разница в том, что вам нужно разделить список файлов запятыми.
touch index.html, app.js, style.css
Обратите внимание, что это устанавливает только псевдоним для PowerShell. Если PowerShell вам не подходит, вы можете настроить WSL или использовать bash для Windows.
К сожалению, псевдоним будет забыт, как только вы завершите сеанс PowerShell. Чтобы сделать псевдоним постоянным, вы должны добавить его в свой профиль пользователя PowerShell.
В командной строке PowerShell:
notepad $profile
Добавьте определение псевдонима в свой профиль и сохраните.
Я использую cmder
(эмулятор командной строки)
Он позволяет запускать все команды Linux на машине Windows.
Его можно скачать с https://cmder.net/
мне это и вправду нравится
Вы также можете использовать команду copy con [filename] в командном окне 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
в локальном каталоге.
Если на вашем ПК установлен Cygwin, вы можете просто использовать прилагаемый исполняемый файл для сенсорного ввода (также через командную строку Windows):
C:\cygwin64\bin\touch.exe <file_path>
Предполагая, что файл существует, и вам просто нужно обновить метку времени.
type test.c > test.c.bkp && type test.c.bkp > test.c && del test.c.bkp
Использовать
rem. > file.txt
(обратите внимание на точку, прикрепленную к команде «rem»)
, это создает пустой файл.
Кратчайшее возможное ванильное решение:
.>myfile.txt
Вы получите сообщение об ошибке, но файл будет создан:
Если у вас есть WSL с соответствующим дистрибутивом, таким как Ubuntu, вы можете иметь команду touch в CMD, а не только в терминале bash. У меня работает на Windows 10 и 11 Windows Terminal
Если вы используете VS Code, есть инструмент командной строки
code
чтобы помочь вам открыть несуществующий файл в VS Code.
Во всех других ответах чего-то не хватает. Линуксtouch
команда имеет-t
опция, которая позволяет вам установить время последнего изменения на любую произвольную дату и время, а не только на текущее время.
Это устанавливает дату изменения 20 декабря 2012 года в 30 минут после полуночи.
touch -t 201212210030 filename.txt
Чтобы получить аналог в Windows, вам нужно быть в PowerShell, это невозможно сделать в Cmd.
- Измените дату/временную метку создания файла с именем :
(Get-Item "D:\Test\filename.txt").CreationTime=("21 December 2012 00:30:00")
- Измените дату/временную метку последней записи файла с именем :
(Get-Item "D:\Test\filename.txt").LastWriteTime=("21 December 2012 00:30:00")
- Изменить дату/время последнего доступа к файлу с именем
filename.txt
:
(Get-Item "D:\Test\filename.txt").LastAccessTime=("21 December 2012 00:30:00")
Да, вы можете использовать Node для Touch, я просто использую это, и все работает нормально в Windows Cmd или Gitbash
Использоватьtype
вместоtouch
type YOUR_FILE_NAME
Однако он ограничен только одним файлом