Windows等同于“触摸”(即,创建index.html的node.js方法)


195

在Windows机器上,我收到此错误

“触摸”不被识别为内部或外部命令,可操作程序或批处理文件。

当我按照说明进行操作时:

touch index.html app.js style.css

是否有一个等同于使用“触摸”的窗户?我是否需要手动创建这些文件(并修改它们以更改时间戳)才能实现这种命令?似乎不太...节点式...


5
一个简单的Google搜索向您显示了许多Windows实现touch。这里的其他讨论:superuser.com/questions/10426/…Cygwin库是Windows上Unix命令的通用工具集。
jfriend00 2015年



1
如果您在使用PowerShell时已到达此处,请直接跳至Raghuveer的答案
RBT

Answers:


279

在cmd窗口中输入:

type nul > your_file.txt

这将在your_file.txt文件中创建0个字节。

另一种方法是使用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超级用户链接很棒。您应该将其发布为答案。
Denise Skidmore

@DeniseSkidmore谢谢,我添加了答案。问题已经很深了,人们会比我的答案更可能阅读我对这个答案的评论,但是现在就可以了。
stenci

66

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

它将遍历它的参数列表,并为每个元素(如果存在)更新文件时间戳,否则创建它。


35

您可以使用以下命令:ECHO >> filename.txt

它将在当前文件夹中创建一个具有给定扩展名的文件。

更新:

对于空文件,请使用:复制NUL filename.txt


8
甚至更好type NUL > filename(创建一个0字节的文件)
krzemian '16

23
像触摸一样,如果存在该文件也不会覆盖:type NUL >> filename
henon

3
这是添加“打开ECHO”的好方法。到您的文件。
ripvlan

4
这不会更新现有文件的时间戳。
Denise Skidmore

1
我认为Denise Skidmore是在回应农农,而不是OP。(我同意她的评论。)
基思·罗素


15

我很惊讶这里有多少答案是错误的。在文件中不回显任何内容都会使文件充满ECHO is ON,而试图回显$nul到文件中则会在字面上放置$nul文件。此外,对于PowerShell,回显$null到文件实际上不会生成0kb的文件,但是UCS-2 LE BOM如果编码为,则如果您需要确保文件没有字节序标记,则可能会变得凌乱。

在测试完所有答案并引用了一些类似的答案之后,我可以保证每个控制台外壳程序都可以使用这些答案。只需更改FileName.FileExtension为您想要的文件的完整路径或相对路径即可touch;感谢Keith RussellCOPY 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

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的一个特定原因是我没有用完copyfsutil但是已经有一段时间了fsutil。我会尝试找出原因...
kayleeFrye_onDeck

1
即使它们的行为相同,我想如果没有速度测试,我说一个更好的还为时过早。
基思·罗素

14

在命令行上使用以下命令:

fsutil file createnew filename  requiredSize

参数信息如下:

fsutil-文件系统实用程序(您正在运行的可执行文件)

文件-触发文件操作

createnew-要执行的操作(创建新文件)

文件名-实际上是文件名

requiredSize-将在创建的文件中分配文件大小(以字节为单位)


2
需要一些解释才能将其视为一个不错的答案。不清楚这五个词是什么意思。
jfriend00 2015年

1
对我NULL有用... 虽然requiredSize事情很奇怪...该命令只是用数千个s 填充了您的新文件...很奇怪...所以只使用0 ...如果跳过requiredSize会产生错误。 。
dsdsdsdsd

1
这个命令需要管理员权限:(
ADJ

1
touch还会更新现有文件的时间戳,而不仅仅是创建新文件。
丹妮丝·斯基莫

1
触摸是一种快速的操作方法,我想,最接近它的是echo或type,尽管这是用于脚本编写的非常方便的工具,并且在WS16中广泛使用,但请竖起大拇指!docs.microsoft.com/en-us/windows-server/administration/…–
艾伦(Alan)

10

在Windows Power Shell上,可以使用以下命令:

New-Item <filename.extension>

要么

New-Item <filename.extension> -type file

注意:New-Item可以用别名ni替换


1
这是当今Windows世界中真正的答案,在这些世界中,PowerShell是默认的命令外壳程序。
RBT

不知道您指的是什么Windows,我刚刚安装了新的Windows 10,而Powershell绝对不是默认的Shell。'New-Item' is not recognized as an internal or external command
user5359531

8

您可以使用以下命令复制touch的功能:

$>>filename

它的作用是尝试执行一个名为的程序$,但是如果该程序$不存在(或不是产生输出的可执行文件),则不会产生输出。从本质上讲,它是对该功能的一种入侵,但是您将收到以下错误消息:

无法将“ $”识别为内部或外部命令,可操作程序或批处理文件。

如果您不希望出现错误信息,则可以执行以下两项操作之一:

type nul >> filename

要么:

$>>filename 2>nul

type命令尝试显示nul的内容,该内容不执行任何操作,但在读取时返回EOF(文件结尾)。

2>nul将错误输出(输出2)发送到nul(在写入时忽略所有输入)。显然,第二个命令(带有2>nul)使type键入变得多余,因为它可以更快地键入。但是至少您现在有了选择和知识。


这很好,但%ERRORLEVEL%始终设置为非零。您可以通过添加noop来解决该问题|| cd.,但这总是将错误设置为0,如果“触摸”失败,则可能不是您想要的。
基思·罗素

5

在Windows Powershell终端中仿真Unix / Mac OS X的“ touch”命令不需要命令,type也不echo需要。只需使用以下速记:

$null > filename

这将在您当前的位置创建一个名为“文件名”的空文件。使用您可能需要的任何文件扩展名,例如“ .txt”。

来源:https : //superuser.com/questions/502374/equivalent-of-linux-touch-to-create-an-empty-file-with-powershell(请参阅评论)


1
好像您错过了echo
sabithpocker

Windows cmd中的@ sabithpocker,$ null不存在,并且由于不存在,因此不会产生任何输出。您$null > filename将空输出发送到文件名(如果您发现我的意思)。
Keldon Alleyne

1
@sabithpocker在Windows Powershell中,无需运行即可。echo在所需的标准命令行终端(cmd)中echo。对困惑感到抱歉。
奥利弗·沙费尔德'17

@OliverSchafeld和Keldon谢谢您的解释。
sabithpocker

1
这会将BOM表添加到文件中。
kayleeFrye_onDeck

3

您还可以在Windows命令窗口(cmd.exe)中使用copy con [filename]

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(命令行模拟器)

它允许您在Windows计算机中运行所有Linux命令。

可以从https://cmder.net/下载

我很喜欢


1
当我尝试在Win10中打开Cmder时,出现“未知发布者”警告怎么办?笨蛋
克里斯

2

假设文件存在并且您只需要更新时间戳。

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

2

在Windows 10的Visual Code Studio终端中,这是我创建新文件的工作:

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.