在windows机器上,我得到这个错误
“touch”不能被识别为内部或外部命令、可操作程序或批处理文件。
我遵循这些指令似乎是linux特定的,但在标准的windows命令行上,它不是这样工作的:
touch index.html app.js style.css
windows中是否有类似于linux / mac os / unix世界中的'touch'命令?为了实现这类命令,我是否需要手工创建这些文件(并修改它们以更改时间戳)?我正在使用节点,这似乎不是很…node-ish……
在命令行中使用以下命令:
fsutil file createnew filename requiredSize
参数信息如下:
fsutil -文件系统实用程序(您正在运行的可执行文件)
文件-触发文件操作
Createnew -执行的操作(创建一个新文件)
文件名-将是文件的字面名称
requiredSize -在创建的文件中分配一个文件大小,单位为字节
Windows本身不包含touch命令。
touch
您可以使用任何可用的公共版本,也可以使用您自己的版本。将此代码保存为touch.cmd并将其放置在路径中的某处
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文件名。txt
在windows命令行如cmd上替换touch命令的一个简单方法是:
type nul > your_file.txt
这将在your_file.txt文件中创建0个字节。
your_file.txt
这也是在windows批处理文件中使用的一个很好的解决方案。
另一种方法是使用回声命令:
echo.> your_file.txt
的回声。-将创建一个只有一行空的文件。
如果需要保存文件内容,请使用>>而不是>
>>
>
> Creates a new file >> Preserves content of the file
例子
type nul >> your_file.txt
你也可以使用调用命令。
在不停止父批处理程序的情况下从另一个批处理程序调用一个批处理程序。call命令接受标签作为调用的目标。
例子:
call >> your_file.txt
wsl touch
或
wsl touch textfilenametoedit.txt
不需要引号。
你也可以在Windows命令窗口(cmd.exe)中使用复制con[文件名]:
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的文件。
yourfile.txt
没有命令——无论是__abc0还是echo——在Windows Powershell终端中模拟Unix /Mac OS X的“touch”命令是必要的。简单地使用以下简写:
echo
$null > filename
这将在当前位置创建一个名为“filename”的空文件。使用您可能需要的任何文件扩展名,例如:. txt。
来源:https://superuser.com/questions/502374/equivalent-of-linux-touch-to-create-an-empty-file-with-powershell(见注释)
你可以用下面的命令复制touch的功能:
$>>filename
它所做的是尝试执行一个名为$的程序,但如果$不存在(或不是产生输出的可执行文件),则它不会产生输出。它本质上是一个功能上的黑客,但是你会得到以下错误消息:
$
'$'不被识别为内部或外部命令, 可操作的程序或批处理文件
如果你不想要错误信息,那么你可以做以下两件事之一:
type nul >> filename
或者:
$>>filename 2>nul
type命令试图显示nul的内容,它什么也不做,只是在读取时返回一个EOF(文件的结束)。
type
2>nul将error-output (output 2)发送到nul(当写入时忽略所有输入)。显然,第二个命令(带有2>nul)被type命令取代了,因为它打字更快。但至少你现在有了选择和知识。
2>nul
简单,txt文件的例子
echo $null >> filename.txt
答案是错误的,它只在文件不存在时工作。如果文件存在,使用第一个不执行任何操作,第二个在文件末尾添加一行。
正确答案是:
copy /b filename.ext +,,
我在这里找到它:https://superuser.com/questions/10426/windows-equivalent-of-the-linux-command-touch/764721#764721
是的,你可以使用Node for Touch,我只是使用它,它在windows Cmd或gitbash中工作都很好
正如前面提到的
echo >> index.html
它可以是任何文件,具有任何扩展名 然后做< / p >
notepad index.html
这将在记事本编辑器中打开您的文件
在windows Power Shell上,可以使用以下命令:
New-Item <filename.extension>
New-Item <filename.extension> -type file
注意:新项目可以替换为它的别名倪
我很惊讶这里有多少答案只是错误的。在文件中不回显任何内容会将文件填充为ECHO is ON之类的内容,并且尝试将$nul回显到文件中会将$nul直接放入文件中。此外,对于PowerShell,将$null回显到文件中实际上不会生成一个0kb的文件,而是编码为UCS-2 LE BOM的文件,如果您需要确保文件没有字节顺序标记,这可能会变得混乱。
ECHO is ON
$nul
$null
UCS-2 LE BOM
在测试了这里的所有答案并引用了一些类似的答案之后,我可以保证这些答案在每个控制台shell中都可以工作。只需将FileName.FileExtension更改为你想要touch的文件的完整路径或相对路径;感谢基思•罗素的COPY NUL FILE.EXT更新:
FileName.FileExtension
COPY NUL FILE.EXT
copy NUL FileName.FileExtension
这将创建一个名为FileName.FileExtension的新文件,大小为0字节。如果文件已经存在,它基本上会原地复制自己来更新时间戳。我想说这是一个比1:1的touch功能更多的解决方案,但我不知道CMD的任何内置工具,可以在不改变任何其他内容的情况下完成更新文件的时间戳。
if not exist FileName.FileExtension copy NUL FileName.FileExtension
if (!(Test-Path FileName.FileExtension -PathType Leaf)) {New-Item FileName.FileExtension -Type file} else {(ls FileName.FileExtension ).LastWriteTime = Get-Date}
是的,它将作为一行程序在控制台工作;不需要将它放在PowerShell脚本文件中。
if (!(Test-Path FileName.FileExtension -PathType Leaf)) {New-Item FileName.FileExtension -Type file}
如果你的PC上安装了Cygwin,你可以简单地使用提供的触摸可执行文件(也可以通过windows命令提示符):
C:\cygwin64\bin\touch.exe <file_path>
我使用cmder(一个命令行模拟器)
cmder
它允许您在Windows计算机中运行所有Linux命令。
它可以从https://cmder.net/下载
我真的很喜欢
假设文件存在,您只需要更新时间戳。
type test.c > test.c.bkp && type test.c.bkp > test.c && del test.c.bkp
从Windows 10上的Visual Code Studio的终端,这是我创建一个新文件的方法:
type > hello.js echo > orange.js ni > peach.js
正如Raghuveer在他/她的回答中指出的那样,ni是New-Item的PowerShell别名,所以你可以使用ni而不是触摸从PowerShell提示符创建文件。
ni
New-Item
如果你喜欢输入touch而不是ni,你可以为PowerShell New-Item cmdlet设置一个touch别名。
在Windows PowerShell中创建触摸命令:
在PowerShell提示符中定义新的别名。
Set-Alias -Name touch -Value New-Item
现在触摸命令工作几乎与你所期望的一样。唯一的区别是您需要用逗号分隔文件列表。
touch index.html, app.js, style.css
注意,这只是为PowerShell设置别名。如果你不喜欢PowerShell,你可以在Windows上设置WSL或使用bash。
不幸的是,当您结束PowerShell会话时,别名将被忘记。要使别名永久存在,必须将其添加到PowerShell用户配置文件中。
PowerShell提示符:
notepad $profile
将别名定义添加到概要文件并保存。
对于一个非常简单的touch版本,它主要用于在当前目录中创建一个0字节的文件,另一种替代方法是创建一个touch.bat文件,并将其添加到%Path%或复制到C:\Windows\System32目录,如下所示:
touch.bat
%Path%
C:\Windows\System32
@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
也
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'"
在你的机器上安装NPM
在命令提示符中运行以下命令。
npm install touch-cli -g
现在你将能够使用触摸cmd。
如果你正在使用VS Code,有一个命令行工具 code来帮助你在VS Code中打开一个不存在的文件。
code
最简单的解决方案是:
.>myfile.txt
你会得到一个错误,但是文件创建了:
使用rem. > file.txt(注意命令"rem"后面的点) 这将创建一个空文件
rem. > file.txt
其他的答案都少了些什么。Linux touch命令有一个-t选项,它允许你将最后修改的时间设置为任意日期和时间,而不仅仅是当前时间。
-t
将filename.txt的修改日期设置为午夜后30分钟的2012年12月20日。
filename.txt
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")
(Get-Item "D:\Test\filename.txt").LastAccessTime=("21 December 2012 00:30:00")
使用PowerShell,键入:ni index.html或ni style.css或ni app.js
ni index.html
ni style.css
ni app.js
ni <filename>.<extension>
如果你有WSL和适当的发行版,比如Ubuntu,你可以在CMD中有触摸命令,而不仅仅是bash终端。它适用于我的Windows 10 &11 Windows终端