touch 命令不起作用,我应该使用什么来代替? [重复]

问题描述 投票:0回答:2

我尝试使用 VS Code 中的终端创建一个空文件,但命令行显示错误,提示该命令无法识别。我不明白这是怎么了?

这是我尝试制作文件时的错误:

touch : The term 'touch' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path 
was included, verify that the path is correct and try again.
At line:1 char:1
+ touch app.js
+ ~~~~~
    + CategoryInfo          : ObjectNotFound: (touch:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
 
powershell terminal command-line
2个回答
3
投票

正如 Lee Dailey 指出的那样,

touch
既不是 PowerShell 命令,也不是 Windows 上的标准实用程序(外部程序);相比之下,在类 Unix 平台上 touch
 是一个标准实用程序
,具有双重用途:

  • (a) 当给定

    existing 文件路径时,文件的上次修改 (.LastWriteTime

    ) 和上次访问 (
    .LastAccessTime
    ) 时间戳默认设置为当前时间点。

  • (b) 当给定

    不存在文件路径时,默认情况下会创建此类文件。

PowerShell 中没有

等效命令(从 PowerShell 7.2 开始),但您可以使用现有命令分别实现 (a) 和 (b),并且可以编写同时提供 (a) 和 (b) 的自定义脚本或函数(b) 以类似于 Unix touch 实用程序的方式:


(a) 的 PowerShell 实现,通过
  • Get-Item
    System.IO.FileInfo
     实例的属性:
  • # Update the last-modified and last-accessed timestamps of existing file app.js $file = Get-Item -LiteralPath app.js $file.LastWriteTime = $file.LastAccessTime = Get-Date
使用 
  • New-Item
     cmdlet 实现 (b) 的 PowerShell:
  • # Create file app.js in the current dir. # * If such a file already exists, an error will occur. # * If you specify -Force, no error will occur, but the existing file will be # *truncated* (reset to an empty file). $file = New-Item app.js
注意:创建文件时,默认为 
0

字节文件,但您可以通过

-Value
参数传递内容。


Jeroen Mostert

建议使用以下技术来实现 条件 性质 touch实用程序的文件创建:

# * If app.js exists, leaves it untouched (timestamps are *not* updated)
# * Otherwise, create it.
Add-Content app.js $null

注:

    为了获得类似
  • touch

    的行为,(a)(更新上次写入和上次访问时间戳)仍然必须单独实现。

    
    

  • 至少假设,
  • Add-Content

    方法可能会
    失败,即如果现有目标文件是只读 - 而操作此类文件的时间戳可能仍然有效。 (虽然您可以抑制错误,但这样做可能会让您错过真正的失败。)

  • 下一节将介绍一个包含 (a) 和 (b) 的自定义函数,同时还提供 Unix
touch

实用程序提供的附加功能。


一个名为
Touch-File

的自定义函数实现了 Unix

touch
实用程序的 大部分 功能 - 它有几个选项可以提供除上述默认值之外的其他行为 - 可以从 this MIT 许可的 Gist 获得

假设您已查看链接的代码以确保其安全(我个人可以向您保证,但您应该始终检查),您可以直接下载并定义当前会话,如下所示,其中还提供了有关如何使其在未来的会议中可用:
irm https://gist.github.com/mklement0/82ed8e73bb1d17c5ff7b57d958db2872/raw/Touch-File.ps1 | iex


注意:

Touch
 不是 PowerShell 中
批准的动词

,但尽管如此,它还是被选择了, 因为没有一个被批准的动词能够充分传达核心功能 这个命令。

调用示例:
# * If app.js exists, update its last-write timestamp to now.
# * Otherwise, create it (as an empty file).
Touch-File app.js

怎么样?

0
投票

© www.soinside.com 2019 - 2024. All rights reserved.