我尝试使用 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
正如 Lee Dailey 指出的那样,
touch
既不是 PowerShell 命令,也不是 Windows 上的标准实用程序(外部程序);相比之下,在类 Unix 平台上 touch
是一个标准实用程序,具有双重用途:
existing 文件路径时,文件的上次修改 (.LastWriteTime
) 和上次访问 (
.LastAccessTime
) 时间戳默认设置为当前时间点。
不存在文件路径时,默认情况下会创建此类文件。
等效命令(从 PowerShell 7.2 开始),但您可以使用现有命令分别实现 (a) 和 (b),并且可以编写同时提供 (a) 和 (b) 的自定义脚本或函数(b) 以类似于 Unix touch
实用程序的方式:
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
参数传递内容。
建议使用以下技术来实现 条件 性质
touch
实用程序的文件创建:
# * If app.js exists, leaves it untouched (timestamps are *not* updated)
# * Otherwise, create it.
Add-Content app.js $null
注:
touch
的行为,(a)(更新上次写入和上次访问时间戳)仍然必须单独实现。
方法可能会失败,即如果现有目标文件是只读 - 而操作此类文件的时间戳可能仍然有效。 (虽然您可以抑制错误,但这样做可能会让您错过真正的失败。)
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
怎么样?