在 Windows 机器上,我收到此错误
'touch' 不是内部或外部命令、可运行程序或批处理文件。
我正在关注这些似乎是特定于 linux 的 instructions,但在标准的 Windows 命令行上它不能像这样工作:
touch index.html app.js style.css
是否有与 linux / mac os / unix world 中的“touch”命令等效的 windows ?为了实现这种命令,我是否需要手动创建这些文件(并修改它们以更改时间戳)?我正在使用节点,这似乎不是很......节点式......
touch
的许多 Windows 实现。此处的其他讨论:superuser.com/questions/10426/… 和 Cygwin library 是 Windows 上 Unix 命令的常用工具集。
在 cmd 之类的 Windows 命令行上替换 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 本身不包含 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
type NUL > filename
(创建一个 0 字节的文件)
type NUL >> filename
答案是错误的,它仅在文件不存在时才有效。如果文件存在,使用第一个什么都不做,第二个在文件末尾添加一行。
正确答案是:
copy /b filename.ext +,,
我在这里找到它:https://superuser.com/questions/10426/windows-equivalent-of-the-linux-command-touch/764721#764721
在 Windows Power Shell 上,您可以使用以下命令:
New-Item <filename.extension>
或者
New-Item <filename.extension> -type file
注意:New-Item 可以用它的别名 ni 代替
'New-Item' is not recognized as an internal or external command
-ErrorAction SilentlyContinue
,这样它就不会在现有文件上出错。
我很惊讶这里有多少答案只是错误。在文件中不回显任何内容将用 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}
fsutil file CreateNew FileName.FileExtension 0
替换为 copy NUL Filename.FileExtension
来改进它,因为后者更短并且做同样的事情。
copy
而不是 fsutil
但已经有一段时间了......我很确定这就是我了解 fsutil
的方式哈哈!我会试着找出原因...
在命令行上使用以下命令:
fsutil file createnew filename requiredSize
参数信息如下:
fsutil - 文件系统实用程序(您正在运行的可执行文件)
文件 - 触发文件操作
createnew - 要执行的操作(创建一个新文件)
文件名 - 就是文件名
requiredSize - 将在创建的文件中分配文件大小(以字节为单位)
NULL
s 填充您的新文件...很奇怪...所以只需使用 0 ...如果您跳过所需尺寸...
在你的机器上安装 npm
在命令提示符下运行以下命令。
npm install touch-cli -g
现在您将能够使用 touch cmd。
您可以使用以下命令复制 touch 的功能:
$>>filename
它的作用是尝试执行名为 $
的程序,但如果 $
不存在(或者不是产生输出的可执行文件),则它不会产生任何输出。它本质上是对功能的破解,但是您将收到以下错误消息:
'$' 不是内部或外部命令、可运行程序或批处理文件。
如果您不想要错误消息,那么您可以执行以下两项操作之一:
type nul >> filename
或者:
$>>filename 2>nul
type
命令尝试显示 nul 的内容,它什么都不做,只是在读取时返回一个 EOF(文件结尾)。
2>nul
将错误输出(输出 2)发送到 nul(写入时忽略所有输入)。显然,第二个命令(带有 2>nul
)被 type
命令变得多余,因为它可以更快地键入。但至少你现在有了选择和知识。
%ERRORLEVEL%
设置为非零。您可以通过附加 noop || cd.
来解决该问题,但这总是将错误设置为 0,如果“触摸”失败,这可能不是您想要的。
如前所述
echo >> index.html
它可以是任何文件,任何扩展名然后做
notepad index.html
这将在记事本编辑器中打开您的文件
在 Windows Powershell 终端中模拟 Unix/Mac OS X 的“触摸”命令不需要任何命令(type
或 echo
)。只需使用以下速记:
$null > filename
这将在您当前位置创建一个名为“文件名”的空文件。使用您可能需要的任何文件扩展名,例如“.txt”。
echo
$null > filename
将该空输出发送到 filename(如果您发现我的想法)。
echo
的情况下工作。在标准命令行终端 (cmd) 中,您需要 echo
。对困惑感到抱歉。
从 Windows 10 上的 Visual Code Studio 终端,这对我来说是创建一个新文件的方法:
type > hello.js
echo > orange.js
ni > peach.js
对于一个非常简单的 touch
版本(主要用于在当前目录中创建一个 0 字节文件),另一种方法是创建一个 touch.bat
文件并将其添加到 %Path%
或将其复制到 { 4} 目录,如下所示:
触摸.bat
@echo off
powershell New-Item %* -ItemType file
创建单个文件
C:\Users\YourName\Desktop>touch a.txt Directory: C:\Users\YourName\Desktop Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2020-10-14 10:28 PM 0 a.txt
创建多个文件
C:\Users\YourName\Desktop>touch "b.txt,c.txt" Directory: C:\Users\YourName\Desktop Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2020-10-14 10:52 PM 0 b.txt -a---- 2020-10-14 10:52 PM 0 c.txt
还
适用于 PowerShell 和命令提示符。
适用于现有子目录。
如果文件已经存在,则不创建:
New-Item : The file 'C:\Users\YourName\Desktop\a.txt' already exists.
对于多个文件,仅创建不存在的文件。接受以逗号分隔的文件名列表,不带空格或在需要空格时用引号括起来:
接受以逗号分隔的文件名列表,不带空格或在需要空格时用引号括起来:
C:\Users\YourName\Desktop>touch d.txt,e.txt,f.txt C:\Users\YourName\Desktop>touch "g.txt, 'name with spaces.txt'"
您还可以在 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
的文件。
我使用 cmder
(命令行模拟器)
它允许您在 Windows 机器内运行所有 Linux 命令。
它可以从 https://cmder.net/ 下载
我很喜欢
正如 Raghuveer 在他/她的 answer 中指出的那样,ni
是 New-Item
的 PowerShell 别名,因此您可以使用 ni
而不是 touch 从 PowerShell 提示符创建文件。
如果您更喜欢键入 touch
而不是 ni
,则可以将 touch
别名设置为 PowerShell New-Item
cmdlet。
在 Windows PowerShell 中创建触摸命令:
在 PowerShell 提示符下,定义新别名。
Set-Alias -Name touch -Value New-Item
现在 touch 命令的工作方式几乎与您预期的一样。唯一的区别是您需要用逗号分隔文件列表。
touch index.html, app.js, style.css
请注意,这仅设置 PowerShell 的别名。如果您不喜欢 PowerShell,您可以设置 WSL 或在 Windows 上使用 bash。
不幸的是,一旦您结束 PowerShell 会话,别名就会被遗忘。要使别名永久化,您必须将其添加到您的 PowerShell 用户配置文件中。
从 PowerShell 提示符:
notepad $profile
将您的别名定义添加到您的配置文件并保存。
如果您的 PC 中安装了 Cygwin,您可以简单地使用为 touch 提供的可执行文件(也可以通过 windows 命令提示符):
C:\cygwin64\bin\touch.exe <file_path>
假设文件存在并且您只需要更新时间戳。
type test.c > test.c.bkp && type test.c.bkp > test.c && del test.c.bkp
最短的香草解决方案是:
.>myfile.txt
https://i.stack.imgur.com/0lLsn.png
您将收到错误消息,但文件已创建:
https://i.stack.imgur.com/E4TlJ.png
使用 rem. > file.txt
(注意附加到命令“rem”的点)
这会创建一个空文件
所有其他答案都缺少一些东西。 Linux touch
命令有一个 -t
选项,可让您将上次修改时间设置为任意日期和时间,而不仅仅是当前时间。
这会将 filename.txt
的修改日期设置为 2012 年 12 月 20 日午夜后 30 分钟。
touch -t 201212210030 filename.txt
要在 Windows 中获得等价物,您需要在 PowerShell 中,不能在 Cmd 中完成。
更改名为 filename.txt 的文件的创建日期/时间戳:
(Get-Item "D:\Test\filename.txt").CreationTime=("21 December 2012 00:30:00")
更改名为 filename.txt 的文件的最后写入日期/时间戳:
(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")
使用 PowerShell,键入:ni index.html
或 ni style.css
或 ni app.js
ni <filename>.<extension>
简单,以txt文件为例
echo $null >> filename.txt
$null
添加到文件中。
是的,你可以使用 Node for Touch 我只是使用它,它在 windows Cmd 或 gitbash 中运行良好
https://i.stack.imgur.com/tX2tH.png
[cmd]
,这意味着 OP 想要一个对 CMD 开箱即用的答案,这意味着没有不包含默认 Windows 安装的命令行实用程序。这将排除几乎所有脚本语言,甚至包括 CScript、WScript 和 PowerShell 等内置 Windows 脚本语言。关键不是它可以在 CMD 环境中工作,而是任何有权访问 CMD 的人都可以使用,不包括权限问题。
access denied
。第二个选项工作得很好!>>
第一个不执行任何操作,第二个在文件末尾添加一行。正确答案是superuser.com/questions/10426/…