PowerShellにはtouch
と同等のものがありますか?
たとえばLinuxでは、次のコマンドを呼び出すことで新しい空のファイルを作成できます。
touch filename
Windowsでは、これはかなり厄介です。通常、私は単にメモ帳の新しいインスタンスを開き、空のファイルを保存します。
では、PowerShellにこれを行うためのプログラム的な方法はありますか?
私はtouchの振る舞いを正確に一致させることを検討しているのではなく、単に空のファイルを作成するための最も簡単な方法を見つけることを目的としています。
追加リダイレクタ ">>"を使用すると、既存のファイルが削除される問題が解決されます。
echo $null >> filename
空のファイルを作成するには
New-Item -ItemType file example.txt
ファイルのタイムスタンプを更新するには
(gci example.txt).LastWriteTime = Get-Date
これは、ファイルが存在しない場合は新しいファイルを作成し、存在する場合はタイムスタンプを更新するバージョンです。
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
}
}
PowerShellでは、次のような同様のタッチ機能を作成できます。
function touch {set-content -Path ($args[0]) -Value ($null)}
使用法:
touch myfile.txt
私は好きです
fc > filename
このタスクのために。空でないファイルを扱うためにあなたは使うことができます
fc >> filename
fc
は、 Format-Custom の単なるエイリアスです。これは、この文脈では何もしない短いコマンド、つまり noop であるため、これを選択しました。あなたがリダイレクトを忘れた場合それはまたいいです
fc filename
あなたにエラーを与える代わりに、ここでもまた何もしません。動作する他のいくつかのエイリアスは
ft -> Format-Table
fw -> Format-Wide
価値ある答えはすでにたくさんありますが、New-Itemのエイリアスがとても好きです。
ファイルタイプの宣言(拡張子が追加されたときに暗黙的に定義されていると仮定します)をやめることもできます。そのため、現在のディレクトリに 'x'という名前のjavascriptファイルを作成します。
ni x.js
タッチよりも3文字早くなります!
私はさまざまな情報源をまとめ、次のものを作成しました。それは私のニーズを満たしました。異なるタイムゾーンでマシン上に構築されたDLLの書き込み日を設定する必要がありました。
$update = get-date
Set-ItemProperty -Path $dllPath -Name LastWriteTime -Value $update
もちろん、複数のファイルに設定することもできます。
Get-ChildItem *.dll | Set-ItemProperty -Name LastWriteTime -Value $update
プロファイルファイルを開きます。
notepad $profile
次の行を追加してください。
function touch {New-Item "$args" -ItemType File}
保存してすぐに使用するために$ profileをリロードしてください。 (PowerShellを閉じたり開いたりする必要はありません)
. $profile
現在のディレクトリに新しいファイルを追加するには、次のように入力します。
touch testfile.txt
「myfolder」ディレクトリ内に新しいファイルを追加するには、次のように入力します。
touch myfolder\testfile.txt
同じ名前のファイルが既に存在する場合、それは上書きされません。代わりにエラーが発生します。
私はそれが役立つことを願っています
ボーナスチップ:
次の行を追加して、 'mkdir'と同等のことができます。
function mkdir {New-Item "$args" -ItemType Directory}
同じ用途
mkdir testfolder
mkdir testfolder\testsubfolder
ac file.txt $null
ファイルの内容は削除されませんが、日付も更新されません。
ここでの答えの多くはファイルのエンコードを説明していないようです。
他のさまざまな理由で、私はこの問題に遭遇したばかりですが、
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がサポートする他の有効な(しかしテストされていない)エンコーディングは以下の通りです。文字列ユニコードbigendianunicode | utf8 | utf7 | utf32 |アスキーデフォルトoem}]。ファイルに保存するテキストデータや-appendフラグを付けるために、Out-Fileにパイプで送ることもできます。例えば:
echo $null | Out-File .\stuff.txt -Encoding ascii -Append
この例では、何らかの理由でタイムスタンプを更新しませんが、これは更新されます。
echo foo | Out-File .\stuff.txt -Encoding ascii -Append
ただし、ファイルの末尾に「foo」を追加すると副作用があります。
あなたがどんなエンコーディングを持っているのかわからない場合は、私はVS - Codeは右下隅にそれがエンコーディングが何であるかを言う気の利いた機能があることがわかりました。 Notepad ++にも同様の機能があると思います。
説明したシナリオ(ファイルが存在しない場合)では、これは迅速で簡単です。
PS> sc example.txt $null
ただし、touch
の他の一般的な用途は、ファイルのタイムスタンプを更新することです。私のsc
の例をそのまま使用しようとすると、ファイルの内容が消去されます。
Webページ http://xahlee.info/powershell/PowerShell_for_unixer.html から、次のことがわかります。
new-item -type file [filename]
これは確かにサイズ0の新しいファイルを作成します。
これはUnixのtouch
の他の機能、すなわちfilenameがすでに存在する場合にはタイムスタンプを更新することはしませんが、問題はユーザーが単にサイズ0のファイルを作成したいということです。メモ帳に頼ることなく対話的に。
windowsで空のファイルを作成するための最も簡単な方法は次のとおりです。
fsutil file createnew file.name 0
ゼロはバイト単位のファイルサイズなので、これは大きなファイルを作成するのにも役立ちます(実際のデータが含まれず、ほとんど何も圧縮されないため、圧縮テストには役立ちません)。
「Touch」は 承認されたPowerShell動詞 ではないため、「Write-File」という名前を使用しました。私はまだタッチとしてそれをエイリアスします。
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
使用法:
Import-Module ./Touch.psm1
touch foo.txt
サポート:
Credential
Verbose
、Debug
、およびWhatIf
のフラグ