jsa*_*nen 238 windows powershell windows-8 powershell-3.0
touch在 PowerShell 中是否有等价物?
例如,在 Linux 中,我可以通过调用来创建一个新的空文件:
touch filename
Run Code Online (Sandbox Code Playgroud)
在 Windows 上这很尴尬——通常我只是打开一个记事本的新实例并保存一个空文件。
那么 PowerShell 中是否有一种编程方式来执行此操作?
我不希望完全匹配触摸行为,而只是为了找到创建空文件的最简单的等效项。
Yas*_*wal 216
使用附加重定向器“>>”解决了删除现有文件的问题:
echo $null >> filename
Run Code Online (Sandbox Code Playgroud)
dan*_*gph 162
要创建一个空白文件:
New-Item -ItemType file example.txt
Run Code Online (Sandbox Code Playgroud)
要更新文件的时间戳:
(gci example.txt).LastWriteTime = Get-Date
Run Code Online (Sandbox Code Playgroud)
小智 88
这是一个版本,如果它不存在则创建一个新文件或如果它存在则更新时间戳。
Function Touch-File
{
$file = $args[0]
if($file -eq $null) {
throw "No filename supplied"
}
if(Test-Path $file)
{
(Get-ChildItem $file).LastWriteTime = Get-Date
}
else
{
echo $null > $file
}
}
Run Code Online (Sandbox Code Playgroud)
Ƭᴇc*_*007 28
在 PowerShell 中,您可以创建类似的 Touch 函数,如下所示:
function touch {set-content -Path ($args[0]) -Value ($null)}
Run Code Online (Sandbox Code Playgroud)
用法:
touch myfile.txt
Ste*_*nny 22
对于此任务,我更喜欢Format-Table(助记文件触摸):
ft > filename
Run Code Online (Sandbox Code Playgroud)
要处理非空文件,您可以使用:
ft >> filename
Run Code Online (Sandbox Code Playgroud)
我选择这个是因为它是一个简短的命令,在这种情况下什么都不做,一个 noop。这也很好,因为如果您忘记重定向:
ft filename
Run Code Online (Sandbox Code Playgroud)
而不是给你一个错误,它只是什么都不做。其他一些可以使用的别名是Format-Custom ( fc) 和Format-Wide ( fw)。
小智 19
已经有很多有价值的答案,但我非常喜欢 New-Item 的别名,它只是:ni
您还可以放弃文件类型声明(我认为在添加扩展名时它是隐式的),因此要在当前目录中创建一个名为“x”的 javascript 文件,我可以简单地编写:
ni x.js
Run Code Online (Sandbox Code Playgroud)
比触摸快 3 个字符!
Joh*_*ers 11
我把各种来源放在一起,最后得到了满足我需要的以下内容。我需要设置在不同时区的机器上构建的 DLL 的写入日期:
$update = get-date
Set-ItemProperty -Path $dllPath -Name LastWriteTime -Value $update
Run Code Online (Sandbox Code Playgroud)
当然,你也可以为多个文件设置:
Get-ChildItem *.dll | Set-ItemProperty -Name LastWriteTime -Value $update
Run Code Online (Sandbox Code Playgroud)
小智 8
看起来这里的一堆答案没有考虑文件编码。
由于其他各种原因,我刚刚遇到了这个问题,但是
echo $null > $file
$null > $file
Run Code Online (Sandbox Code Playgroud)
两者都产生一个 UTF-16-LE 文件,而
New-Item $file -type file
Run Code Online (Sandbox Code Playgroud)
生成一个 UTF-8 文件。
无论出于何种原因fc > $fileand fc >> $file,似乎也产生 UTF-8 文件。
Out-File $file -encoding utf8
Run Code Online (Sandbox Code Playgroud)
给你一个 UTF-8-BOM 文件,而
Out-File $file -encoding ascii
Run Code Online (Sandbox Code Playgroud)
给你一个 UTF-8 文件。Out-File 支持的其他有效(但未经测试)的编码是: [[-Encoding] {unknown | 字符串 | 统一码 | bigendianunicode | utf8 | utf7 | utf32 | ASCII | 默认 | OEM}]。您还可以将内容通过管道传输到 Out-File,以便为文件提供一些要存储的文本数据,以及一个 -append 标志。例如:
echo $null | Out-File .\stuff.txt -Encoding ascii -Append
Run Code Online (Sandbox Code Playgroud)
由于某种原因,此示例不会更新时间戳,但此示例会:
echo foo | Out-File .\stuff.txt -Encoding ascii -Append
Run Code Online (Sandbox Code Playgroud)
尽管它确实具有将“foo”附加到文件末尾的副作用。
如果你不确定你有什么编码,我发现 VS-Code 有一个很好的功能,它在右下角说明了编码是什么。我认为 Notepad++ 也有类似的功能。
小智 7
打开您的个人资料文件:
notepad $profile
Run Code Online (Sandbox Code Playgroud)
添加以下行:
function touch {New-Item "$args" -ItemType File}
Run Code Online (Sandbox Code Playgroud)
保存它并重新加载您的 $profile 以便立即使用它。(无需关闭和打开powershell)
. $profile
Run Code Online (Sandbox Code Playgroud)
要在当前目录类型中添加新文件:
touch testfile.txt
Run Code Online (Sandbox Code Playgroud)
要在“myfolder”目录中添加新文件,请键入:
touch myfolder\testfile.txt
Run Code Online (Sandbox Code Playgroud)
如果同名文件已经存在,则不会被覆盖。相反,你会得到一个错误。
我希望它有帮助
奖金提示:
您可以添加以下行,使其等效于 'mkdir':
function mkdir {New-Item "$args" -ItemType Directory}
Run Code Online (Sandbox Code Playgroud)
同样的用法:
mkdir testfolder
mkdir testfolder\testsubfolder
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
281857 次 |
| 最近记录: |