在 windows 的命令行上创建一个空文件(如 linux touch 命令)

Posted

技术标签:

【中文标题】在 windows 的命令行上创建一个空文件(如 linux touch 命令)【英文标题】:Create an empty file on the commandline in windows (like the linux touch command) 【发布时间】:2015-07-12 17:24:30 【问题描述】:

在 Windows 机器上出现此错误

'touch' 不是内部或外部命令、可运行程序或批处理文件。

我正在关注这些 instructions,它们似乎是特定于 linux 的,但在标准的 windows 命令行上它不能像这样工作:

touch index.html app.js style.css

是否有与 linux / mac os / unix world 中的“touch”命令等效的 windows ?为了实现这种命令,我是否需要手动创建这些文件(并修改它们以更改时间戳)?我正在使用 node,这似乎不是很... node-ish...

【问题讨论】:

simple Google search 向您展示了touch 的许多 Windows 实现。此处的其他讨论:superuser.com/questions/10426/… 和 Cygwin library 是 Windows 上 Unix 命令的常用工具集。 这个问题可能重复:***.com/questions/26343974/… Create file with command line in Node的可能重复 如果您在使用 PowerShell 时登陆过这里,请直接跳转到 Raghuveer's answer。 相关帖子 - Equivalent of Linux touch to create an empty file with PowerShell? 【参考方案1】:

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

fsutil file createnew filename  requiredSize

参数信息如下:

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

file - 触发文件操作

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

filename - 就是文件名

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

【讨论】:

需要一些解释才能被认为是一个体面的答案。目前尚不清楚这五个词的含义。 为我工作...... requiredSize 的东西很奇怪......该命令只是用数千个NULLs 填充你的新文件......很奇怪......所以只需使用 0 .. . 如果您跳过 requiredSize 会生成错误 ... 这个commnad需要管理员权限:( touch 还会更新现有文件的时间戳,而不仅仅是创建新文件。 touch 是一种快速的方式,最接近它的应该是 echo 或 type,我猜,虽然这是一个非常方便的脚本工具,并且在 WS16 中广泛使用,竖起大拇指! docs.microsoft.com/en-us/windows-server/administration/…【参考方案2】:

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 如果那是我独有的。【参考方案3】:

你可以使用这个命令:ECHO >> filename.txt

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

更新:

对于空文件使用:copy NUL filename.txt

【讨论】:

更好的type NUL > filename(创建一个0字节的文件) 和touch一样,如果文件存在,这不会覆盖文件:type NUL >> filename 这是添加“ECHO 已开启”的好方法。到您的文件中。 这不会更新现有文件的时间戳。 我认为 Denise Skidmore 是在回应 henon,而不是 OP。 (我赞同她的评论。)【参考方案4】:

在 Windows 命令行(如 cmd)上替换 touch 命令的一种简单方法是:

type nul > your_file.txt

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

这也是在 Windows 批处理文件中使用的一个很好的解决方案。

另一种方法是使用echo 命令:

echo.> your_file.txt

回声。 - 将创建一个包含一个空行的文件。


如果您需要保留文件的内容,请使用>> 而不是>

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

例子

type nul >> your_file.txt

您也可以使用call 命令。

在不停止父批处理程序的情况下从另一个批处理程序调用。 call 命令接受标签作为调用的目标。

例子:

call >> your_file.txt

--- 或者即使您不想让它变得困难,您也可以安装Windows Subsystem for Linux (WSL)。然后,输入。

wsl touch

wsl touch textfilenametoedit.txt

不需要引号。

【讨论】:

在 Windows 7 上,第一个选项会产生一个可怕的对话框,然后您会在控制台中看到 access denied。第二个选项效果很好! 答案是错误的,只有在文件不存在的情况下才有效。如果文件存在,使用>> 第一个什么都不做,第二个在文件末尾添加一行。正确答案是superuser.com/questions/10426/… @stenci - 我只是在一个不存在的文件上尝试过它,它工作得很好。它创建了文件确定。也许您缺乏管理员权限? @stenci 超级用户链接很棒。您应该将其发布为答案。 @DeniseSkidmore 谢谢,我添加了答案。它很深,人们更有可能阅读我对这个答案的评论而不是我的答案,但现在它就在那里。【参考方案5】:

您也可以在 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 的文件。

【讨论】:

【参考方案6】:

没有命令——typeecho——都不是在 Windows Powershell 终端中模拟 Unix/Mac OS X 的“触摸”命令所必需的。只需使用以下简写:

$null > filename

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

来源:https://superuser.com/questions/502374/equivalent-of-linux-touch-to-create-an-empty-file-with-powershell(见 cmets)

【讨论】:

你好像错过了echo @sabithpocker 在 Windows cmd 中,$null 不存在,并且由于它不存在它不会产生任何输出。你 $null > filename 将那个空输出发送到 filename (如果你发现我的想法)。 @sabithpocker 在 Windows Powershell 中,它可以在没有 echo 的情况下工作。在标准命令行终端 (cmd) 中,您需要 echo。很抱歉造成混乱。 @OliverSchafeld 和 Keldon 谢谢你的解释。 这会将 BOM 添加到文件中。【参考方案7】:

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

$>>filename

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

'$' 未被识别为内部或外部命令, 可运行的程序或批处理文件。

如果您不想要错误消息,则可以执行以下两项操作之一:

type nul >> filename

或者:

$>>filename 2>nul

type 命令尝试显示 nul 的内容,它什么都不做,只是在读取时返回一个 EOF(文件结尾)。

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

【讨论】:

这很好,但它总是将%ERRORLEVEL% 设置为非零。您可以通过附加 noop || cd. 来解决该问题,但这总是将错误设置为 0,如果“触摸”失败,这可能不是您想要的。【参考方案8】:

简单,以txt文件为例

echo $null >> filename.txt

【讨论】:

$null 添加到文件中。【参考方案9】:

答案是错误的,它只在文件不存在时有效。如果文件存在,使用第一个什么都不做,第二个在文件末尾添加一行。

正确答案是:

copy /b filename.ext +,,

我在这里找到它:https://superuser.com/questions/10426/windows-equivalent-of-the-linux-command-touch/764721#764721

【讨论】:

当文件不存在时,此答案不起作用。 (CMD 产生错误。) 这是一个很好的解决方案......文件不存在很容易通过“如果文件存在......”来解决【参考方案10】:

是的,你可以使用 Node for Touch 我只是使用它,它在 windows Cmd 或 gitbash 中运行良好

【讨论】:

我没有对此投反对票,但我会解释为什么会这样。这个问题被标记为[cmd],这意味着 OP 想要一个对 CMD 开箱即用的答案,这意味着没有不包含默认 Windows 安装的命令行实用程序。这将排除几乎所有脚本语言,甚至包括 CScript、WScript 和 PowerShell 等内置 Windows 脚本语言。关键不是它可以在 CMD 环境中工作,而是任何可以访问 CMD 的人都可以使用,不包括权限问题。【参考方案11】:

如前所述

echo >> index.html

它可以是任何文件,任何扩展名 然后做

notepad index.html

这将在记事本编辑器中打开您的文件

【讨论】:

【参考方案12】:

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

New-Item <filename.extension>

New-Item <filename.extension> -type file

注意:New-Item 可以替换为它的别名ni

【讨论】:

这是当今 Windows 世界的真正答案,其中 PowerShell 是默认的命令外壳程序。 不确定您指的是什么 Windows,我刚刚安装了新的 Windows 10,Powershell 绝对不是默认 shell。 'New-Item' is not recognized as an internal or external command 这是 Windows 7 上 PowerShell 5 的最佳答案。【参考方案13】:

我很惊讶这里有多少答案只是错误。在文件中不回显任何内容将用ECHO is ON 之类的内容填充文件,并且尝试将$nul 回显到文件中实际上会将$nul 放入文件中。此外,对于 PowerShell,将 $null 回显到文件中实际上不会生成 0kb 文件,而是编码为 UCS-2 LE BOM 的文件,如果您需要确保文件没有字节顺序标记,这可能会变得混乱。

在这里测试了所有答案并参考了一些类似的答案后,我可以保证这些将在每个控制台 shell 中工作。只需将FileName.FileExtension 更改为您想要touch 的文件的完整路径或相对路径;感谢Keith Russell COPY NUL FILE.EXT 更新:

带有时间戳更新的 CMD

copy NUL FileName.FileExtension

这将创建一个新文件,命名为您放置的任何内容,而不是 FileName.FileExtension,大小为 0 字节。如果文件已经存在,它将基本上就地复制自身以更新时间戳。我想说这比 touch 的 1:1 功能更像是一种解决方法,但我不知道有任何 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

【讨论】:

文件存在的情况,你想将其修改时间戳更新为当前时间?我不明白这些例子是如何实现这一点的。 伟大的观察,RoG!我已经更新了解决这个问题的答案:) 这是最好的答案。但是,我仍然会通过将fsutil file CreateNew FileName.FileExtension 0 替换为copy NUL Filename.FileExtension 来改进它,因为后者更短并且做同样的事情。 @KeithRussell IIRC 有一个特定的原因我没有使用copy 而不是fsutil 但已经有一段时间了......我很确定这就是我了解fsutil 的方式哈哈!我会试着找出原因...... 即使它们的行为相同,我想我现在说一个更好,没有速度测试还为时过早。【参考方案14】:

如果您的 PC 中安装了 Cygwin,您可以简单地使用为 touch 提供的可执行文件(也可以通过 windows 命令提示符):

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

【讨论】:

我通常用于集成 linux 命令的解决方案...我的杀手级命令是 grep... ;-)【参考方案15】:

我使用cmder(命令行模拟器)

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

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

真的很喜欢

【讨论】:

当我尝试在 win10 中打开 Cmder 时出现“未知发布者”警告是怎么回事?无赖。【参考方案16】:

假设文件存在,你只需要更新时间戳。

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

【讨论】:

【参考方案17】:

从 Windows 10 上的 Visual Code Studio 终端,这对我来说是创建新文件的方法:

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

【讨论】:

【参考方案18】:

正如Raghuveer 在他/她的answer 中指出的那样,niNew-Item 的PowerShell 别名,因此您可以使用ni 而不是触摸从PowerShell 提示符创建文件。

如果您更喜欢键入 touch 而不是 ni,可以为 PowerShell New-Item cmdlet 设置一个 touch 别名。

在 Windows PowerShell 中创建 touch 命令:

在 PowerShell 提示符下,定义新别名。

Set-Alias -Name touch -Value New-Item

现在触摸命令的工作原理几乎与您预期的一样。唯一的区别是您需要用逗号分隔文件列表。

touch index.html, app.js, style.css

请注意,这只会设置 PowerShell 的别名。如果您不喜欢 PowerShell,您可以设置 WSL 或在 Windows 上使用 bash。

不幸的是,一旦您结束 PowerShell 会话,别名就会被遗忘。要使别名永久化,您必须将其添加到您的 PowerShell 用户配置文件中。

从 PowerShell 提示符:

notepad $profile

将您的别名定义添加到您的个人资料并保存。

【讨论】:

【参考方案19】:

对于一个非常简单的touch 版本,它主要用于在当前目录中创建一个 0 字节文件,另一种方法是创建一个touch.bat 文件并将其添加到%Path% 或复制它到C:\Windows\System32 目录,像这样:

touch.bat

@echo off
powershell New-Item %* -ItemType file

创建单个文件

C:\Users\YourName\Desktop>touch a.txt 目录:C:\Users\YourName\Desktop 模式 LastWriteTime 长度 名称 ---- ------------- ------ ---- -a---- 2020-10-14 10:28 PM 0 a.txt

创建多个文件

C:\Users\YourName\Desktop>touch "b.txt,c.txt" 目录:C:\Users\YourName\Desktop 模式 LastWriteTime 长度 名称 ---- ------------- ------ ---- -a---- 2020-10-14 10:52 PM 0 b.txt -a---- 2020-10-14 10:52 PM 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>touch "g.txt, 'name with spaces.txt'"

【讨论】:

【参考方案20】:

在你的机器上安装 npm

在命令提示符下运行以下命令。

npm install touch-cli -g

现在你可以使用 touch cmd了。

【讨论】:

nodejs 开发者会喜欢你的回答 “-我应该如何运送我的小猫...-公民...首先购买跨大西洋...然后...继续!!!”的缩影;-)))

以上是关于在 windows 的命令行上创建一个空文件(如 linux touch 命令)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Windows 命令行上获取一组文件的最后修改日期?

Symfony - 进程运行抛出异常 - 在命令行上执行有效

Ubuntu命令窗口的快捷键

如何在 Windows 命令行上使用 pg_restore?

如何在 cmd(Windows) 上创建多个空文件

如何在 Windows 命令行上测量命令的执行时间?