windows – PowerShellで空のファイルを作成するLinuxの`touch`に相当するもの?
PowerShellではtouch
に相当するものはありますか?
例えば、Linuxでは起動することで新しい空のファイルを作成することができます
touch filename
Windowsでは、これはかなり厄介です — 通常、私はメモ帳の新しいインスタンスを開いて空のファイルを保存するだけです
では、PowerShellにはプログラム的な方法があるのでしょうか?
私はタッチの動作を正確に一致させようとしているのではなく、空のファイルを作成するための最もシンプルな同等のものを探しているだけです
203 None 2012-11-07
追加リダイレクト「>>」を使用すると、既存のファイルが削除されてしまう問題が解決されます
echo $null >> filename
189 Yash Agarwal 2012-11-07
空白のファイルを作成します
New-Item -ItemType file example.txt
ファイルのタイムスタンプを更新します
(gci example.txt).LastWriteTime = Get-Date
133 dangph 2013-01-24
存在しない場合は新しいファイルを作成し、存在する場合はタイムスタンプを更新するバージョンです
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
}
}
84 LittleBoyLost 2013-03-25
PowerShellでは、このような感じで似たようなTouch機能を作ることができます
function touch {set-content -Path ($args[0]) -Value ($null)}
Usage:
touch myfile.txt
25 Ƭᴇcʜιᴇ007 2012-11-07
I prefer
fc > filename
を使用します。空でないファイルを扱うには、以下のようにします
fc >> filename
fc
は単に Format-Custom の別名です。これを選んだのは、noopという、このコンテキストでは何もしない短いコマンドだからです。また、リダイレクトを忘れてしまった場合のためにもいいですね
fc filename
がエラーを出す代わりに、またしても何もしません。他にもいくつかのエイリアスを使うことができます
ft -> Format-Table
fw -> Format-Wide
18 Steven Penny 2014-09-30
すでにたくさんの価値ある回答がありますが、私はNew-Itemの別名がとても好きです
また、ファイルタイプ宣言を省略することもできます (これは拡張子が追加されたときに暗黙のうちに行われるものと思われます)
ni x.js
タッチよりも3chの方が早い!
14 Jacob E. Dawson 2017-06-15
いろいろなソースをまとめてみたのですが、以下のようなものがありました。異なるタイムゾーンのマシン上でビルドされたDLLの書き込み日を設定する必要があった
$update = get-date
Set-ItemProperty -Path $dllPath -Name LastWriteTime -Value $update
もちろん、複数のファイルに設定することも可能です
Get-ChildItem *.dll | Set-ItemProperty -Name LastWriteTime -Value $update
9 John Saunders 2013-01-26
ここでの回答の多くはファイルエンコーディングを考慮していないように見えます
他にも様々な理由でこの問題に遭遇しましたが
echo $null > $file
$null > $file
はどちらも UTF-16-LE ファイルを生成します
New-Item $file -type file
はUTF-8ファイルを生成します
なぜかfc > $file
やfc >> $file
もUTF-8ファイルを生成するようです
Out-File $file -encoding utf8
はUTF-8-BOMファイルを提供します
Out-File $file -encoding ascii
は UTF-8 ファイルを提供します。Out-Fileがサポートしているその他の有効な(しかし未検証の)エンコーディングは以下の通りです。[[-Encoding] {unknown | string | unicode | bigendianunicode | utf8 | utf7 | utf32 | ascii | default | oem}]です。また、Out-Fileに何かをパイプして、ファイルに保存するテキストデータを与えたり、-appendフラグをつけることもできます。例えば、以下のようになります
echo $null | Out-File .\stuff.txt -Encoding ascii -Append
この例では何らかの理由でタイムスタンプが更新されませんが、この例では更新されます
echo foo | Out-File .\stuff.txt -Encoding ascii -Append
これはファイルの最後に “foo” を追加するという副作用がありますが
もしあなたがどのエンコーディングを使っているのかわからない場合は、 VS-Code には右下の隅にエンコーディングが何であるかが表示されるという便利な機能があります。Notepad++ にも似たような機能があると思います
7 Garret Hoffman 2017-03-08
ac file.txt $null
ファイルの内容は削除されませんが、日付も更新されません
6 8DH 2013-08-12
プロフィールファイルを開きます
notepad $profile
次の行を追加します
function touch {New-Item "$args" -ItemType File}
保存して、すぐに使えるように$profileをリロードします。( powershell を閉じて開く必要はありません)
. $profile
現在のディレクトリに新しいファイルを追加するには、次のように入力します
touch testfile.txt
myfolder’ ディレクトリ内に新しいファイルを追加するには、次のように入力します
touch myfolder\testfile.txt
同名のファイルが既に存在する場合は上書きされません。その代わりにエラーが出ます
お役に立てれば幸いです
Bonus tip:
以下の行を追加することで、’mkdir’ と同等のものを作ることができます
function mkdir {New-Item "$args" -ItemType Directory}
Same use:
mkdir testfolder
mkdir testfolder\testsubfolder
5 RafaelGP 2013-03-08
あなたが説明したシナリオ(ファイルが存在しない場合)では、これは迅速かつ簡単です
PS> sc example.txt $null
しかし、touch
のもう一つの一般的な使い方は、ファイルのタイムスタンプを更新することです。私のsc
の例をそのように使おうとすると、ファイルの内容が消去されてしまいます
3 Jay Bazuzi 2013-02-25
を使ってWindowsで空のファイルを作成するには、次のようにするのが一番早い方法です
fsutil file createnew file.name 0
ゼロはバイト単位でのファイルサイズなので、大きなファイルを作成するのにも便利です(実際のデータを含まず、かなり圧縮されてしまうので、圧縮のテストには役に立ちません)
2 Jon Carlstedt 2015-11-02
Webページhttp://xahlee.info/powershell/PowerShell_for_unixer.htmlが示唆している
new-item -type file [filename]
と、これは確かにサイズゼロの新しいファイルを作成します
これはUnix touch
の他の機能、すなわちファイル名が既に存在する場合にタイムスタンプを更新する機能を実行しませんが、この質問はユーザがメモ帳に頼らずに対話的にゼロサイズのファイルを作成したいだけであることを暗示しています
2 ghostarbeiter 2016-05-06
私が “Write-File “という名前を使ったのは、”Touch “が承認されたPowerShell動詞ではないからです。しかし、私はこれでもtouchというエイリアスをつけています
Touch.psm1
<#
.Synopsis
Creates a new file or updates the modified date of an existing file.
.Parameter Path
The path of the file to create or update.
#>
Function Write-File {
[CmdletBinding()]
Param(
[Parameter( Mandatory=$True, Position=1 )]
[string] $Path,
[switch] $WhatIf,
[System.Management.Automation.PSCredential] $Credential
)
$UseVerbose = $PSCmdlet.MyInvocation.BoundParameters['Verbose'].IsPresent -eq $True
$UseDebug = $PSCmdlet.MyInvocation.BoundParameters['Debug'].IsPresent -eq $True
$TimeStamp = Get-Date
If( -Not [System.Management.Automation.WildcardPattern]::ContainsWildcardCharacters( $Path ) ) {
New-Item -ItemType:File -Verbose:$UseVerbose -Debug:$UseDebug -WhatIf:$WhatIf -Credential $Credential -Path $Path -ErrorAction SilentlyContinue -Confirm:$False | Out-Null
}
Set-ItemProperty -Verbose:$UseVerbose -Debug:$UseDebug -WhatIf:$WhatIf -Credential $Credential -Path $Path -Name LastWriteTime -Value:$TimeStamp -Confirm:$False | Out-Null
}
Set-Alias -Name touch -Value Write-File
Export-ModuleMember -Function Write-File
Export-ModuleMember -Alias touch
Usage:
Import-Module ./Touch.psm1
touch foo.txt
Supports:
- 他のディレクトリのパス
- ネットワークパスには
Credential
を使用します Verbose
,Debug
,WhatIf
フラグ- ワイルドカード (タイムスタンプの更新のみ)
2 error 2017-03-22