windows – PowerShellで空のファイルを作成するLinuxの`touch`に相当するもの?

powershell powershell-3.0 windows windows-8
この質問はすでにここに答えがあります
WindowsのLinuxコマンド「touch」と同等のものはありますか? (31件の回答)
クローズド 3年前.

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 > $filefc >> $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


タイトルとURLをコピーしました