2012-11-07 19:28:02 +0000 2012-11-07 19:28:02 +0000
180
180

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

PowerShellにはtouchに相当するものはありますか?

例えばLinuxでは、

touch filename

を実行することで、新しい空のファイルを作成することができます。

0x1&

Windowsではこれはかなり厄介です。

私はtouchの動作を正確に一致させようとしているわけではなく、空のファイルを作成するための最もシンプルな同等の方法を探しているだけです。

回答 (14)

171
171
171
2012-11-07 19:36:41 +0000

append redirector “>>>"を使用することで、既存のファイルが削除されてしまう問題を解決しました。

echo $null >> filename
113
113
113
2013-01-24 06:39:09 +0000

空のファイルを作成するには

New-Item -ItemType file example.txt

ファイルのタイムスタンプを更新するには。

(gci example.txt).LastWriteTime = Get-Date
``` 0x1&
78
78
78
2013-03-25 12:47:36 +0000

ここでは、ファイルが存在しない場合は新しいファイルを作成し、存在する場合はタイムスタンプを更新します。

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
    }
}
24
24
24
2012-11-07 19:32:59 +0000

PowerShellでは、このようなTouch関数を作成することができます。

function touch {set-content -Path ($args[0]) -Value ($null)}

使い方。

touch myfile.txt ソース

14
14
14
2014-09-30 05:10:25 +0000

このタスクには、

fc > filename

を使います。空でないファイルを扱うには、

fc >> filename

fc を使うことができます。私がこれを選んだのは、このコンテキストでは何もしない短いコマンドである noop だからです。また、リダイレクト

fc filename

を忘れてしまった場合、エラーになる代わりに何もしないからです。他にも、

ft -> Format-Table
fw -> Format-Wide

0x1& といったエイリアスが動作します。

11
11
11
2017-06-15 16:45:40 +0000

すでにたくさんの価値ある回答がありますが、私はNew-Itemのエイリアスがとても気に入っています: ni

ファイルタイプの宣言を省略することもできます(これは拡張子が追加されたときに暗黙の了解を得ていると思います)。

ni x.js

3文字で、タッチよりも早く作成できます。

8
8
8
2013-01-26 00:33:10 +0000

いろいろなソースをまとめてみたところ、以下のようなものが私のニーズに合っていました。

$update = get-date
Set-ItemProperty -Path $dllPath -Name LastWriteTime -Value $update

もちろん、複数のファイルに対して設定することもできます。

Get-ChildItem *.dll | Set-ItemProperty -Name LastWriteTime -Value $update
6
6
6
2017-03-08 23:30:09 +0000

ここでの回答の多くはファイルエンコーディングを考慮していないようです。

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” を追加するという副作用がありますが、この例では更新されています。 メモ帳++にも似たような機能があると思います。

5
5
5
2013-03-08 12:47:19 +0000

プロファイルファイルを開きます。

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}
5
5
5
2013-08-12 12:52:52 +0000
ac file.txt $null

0x1& ファイルの内容は削除されませんが、日付も更新されません。

3
3
3
2013-02-25 22:19:10 +0000
PS> sc example.txt $null

しかし、touchの他の一般的な使い方は、ファイルのタイムスタンプを更新することです。私の sc の例をそのように使おうとすると、ファイルの内容が消去されてしまいます。

2
2
2
2015-11-02 14:58:44 +0000

を実行して空のファイルを作成するには、次のようにするのが一番早い方法です。

2
2
2
2016-05-06 06:21:30 +0000

ウェブページ http://xahlee.info/powershell/PowerShell_for_unixer.html が提案しています。

new-item -type file [filename]

これは確かにサイズゼロの新しいファイルを作成します。

これはUnix touchのもう一つの機能、つまりfilenameが既に存在する場合にタイムスタンプを更新するという機能を果たしていませんが、この質問はユーザがメモ帳に頼らずに対話的にゼロサイズのファイルを作成したいだけだということを暗示しています。

2
2
2
2017-03-22 17:21:01 +0000

Touchは承認されたPowerShell動詞ではないので、Write-Fileという名前にしました。しかし、私はこれでも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

使い方。

Import-Module ./Touch.psm1
touch foo.txt

サポートしています。

  • 他のディレクトリのパス
  • ネットワークパス用の Credential
  • Verbose, Debug, WhatIf, 0x6& フラグ
  • ワイルドカード (タイムスタンプ更新のみ)