CMDまたはPowerShellを使用してファイルの日付とタイムスタンプを変更する方法

📅
🕑 1 分で読む

ファイルのタイムスタンプを変更するのは些細なことのように思えるかもしれませんが、ファイルが変更されたように見せたり、メタデータの誤りを修正したりする必要がある場合は、驚くほど便利です。Windows がタイムスタンプを誤って変更したり、ドキュメントを古いものに見せるために日付を遡らせたい場合もあります (まあ、それはそれで構いません)。理由は何であれ、PowerShell や CMD (多少の補助が必要) などの組み込みツールを使ってこれらの日付を調整する方法を知っていれば、多くの手間を省くことができます。正直なところ、Windows がこれらの属性をロックダウンしているのは、正しい方法を知らないと少し奇妙です。そこで、このガイドでは、タイムスタンプを思い通りに設定するための実際の手順を詳しく解説します。コマンドライン操作、バッチ処理に関するヒント、そして多少のフラストレーションを覚悟してください。もちろん、Windows は必要以上に難しくしているからです。

コマンドプロンプトまたは PowerShell を使用してファイルの日付とタイムスタンプを変更する方法

ファイルの作成日時、変更日時、アクセス日時が常に間違って表示されることにうんざりしている場合は、手動で設定する方法がいくつかあります。PowerShell は標準で非常に高機能で、3 つのタイムスタンプすべてを簡単に設定できます。一方、CMD はネイティブではこれをサポートしていないため、NirCmd のような小さな外部ユーティリティが役立ちます。どちらの方法を使用するかは、使い慣れているかどうか、更新したいファイルの数によって異なります。必要な手順を順を追って説明します。設定によっては、これらの方法が初回で失敗したり、反映させるために再起動が必要になる場合があるので、最初の試みが完璧でなくても落胆しないでください。

ファイルの日付とタイムスタンプ属性を理解する

まず、各タイムスタンプの意味を理解する必要があります。重要なタイムスタンプは以下のとおりです。

  • 作成日時:ファイルが最初に作成された日時。通常、本当に必要な場合を除き、この情報は変更しない方が良いでしょう。
  • 最終更新日時:ファイルが最後に保存または変更された時刻。最近の編集履歴を偽装したい場合に、通常、この時刻が重要になります。
  • 最終アクセス時刻:ファイルが最後に開かれた、または閲覧された時刻。それほど重要ではありませんが、徹底的に管理したい場合は、これも設定できます。

これらはファイルのメタデータに保存されており、手動で調整できますが、Windows はその点に関してあまり分かりやすくありません。PowerShell ではコマンドを使って直接これらの設定を変更できますが、CMD では外部の助けが必要です。どの設定を変更したいのかを把握することが最初のステップです。そうでなければ、どの部品をいじっているのかも分からずに時計を修理しようとするようなものです。

NirCmdを使用してCMDでファイルタイムスタンプを変更する

コマンドライン操作のみを重視するなら、これが最適な選択肢かもしれません。Windowsにはタイムスタンプを直接変更するネイティブな方法がないため、NirCmdが役立ちます。これは、コマンドラインからファイルのタイムスタンプを設定できる機能を追加する小さなユーティリティです。私は何度か使用しましたが、ある環境では多少の調整でうまくいきましたが、別の環境では再起動が必要でした。そのため、忍耐が鍵となります。

  • NirCmdを公式ソースからダウンロードし、任意の場所に解凍してください。
  • nircmd.exe が含まれているフォルダをシステムのPATH環境変数に追加するか、コマンド実行時に完全なパスを指定してください。
  • コマンドプロンプトを管理者として開いてください。これを怠ると権限の問題が発生する可能性があるため、安全策として管理者として実行することをお勧めします。
  • .を使用して、対象ファイルのディレクトリに移動しますcd
  • 次のようなコマンドを実行します。
nircmd setfiletime "example.txt" "15-03-2023 10:22:30" "15-03-2023 10:22:30" "15-03-2023 10:22:30"

これにより、3つのタイムスタンプすべてが指定した日時になります。必ずdd-mm-yyyy hh:mm:ssの形式を使用してください。そうしないとエラーが発生する可能性があります。

特定の日付ではなく現在時刻に更新したい場合は、次の操作を行ってください。

nircmd setfiletime "example.txt" now now now

最近の編集日や公開日を素早く偽装したい場合に非常に便利です。

CMDループを使用して複数のファイルを一括変更する

修正すべきファイルがたくさんある場合は、一つずつ修正しようとしないでください。CMDとNirCmdはバッチ処理で真価を発揮します。for /rループを使用すれば、フォルダ内はもちろん、サブフォルダ内のファイルもすべて一度に更新できます。少々手間はかかりますが、効果的です。

  • 対象フォルダに移動してください。
  • 次のようなコマンドを実行してください(必要に応じて日付と時刻を置き換えてください)。
for /r %i in (*) do nircmd setfiletime "%i" "15-03-2023 10:23:38" "15-03-2023 10:23:38"

このコマンドは、指定されたフォルダとその配下のすべてのファイルのタイムスタンプを更新します。特に数十個、数百個ものファイルを扱う場合に、タイムスタンプを一括で整理するのに便利です。

PowerShellを使用して柔軟性を高める

PowerShellの方が使い慣れている場合や、外部ツールを使わずに組み込み機能を利用したい場合、PowerShellが最適です。使い方をマスターすれば、非常に強力なツールとなります。組み込みのコマンドレットを使えば、CreationTime、LastWriteTime、LastAccessTimeを直接変更できます。

  • PowerShellは管理者として開いてください。そうしないと権限の問題で操作できない場合があります。
  • 目標期日を設定してください。
$NewDate = Get-Date -Year 2023 -Month 3 -Day 15 -Hour 10 -Minute 22 -Second 30

これにより、再利用可能な日付オブジェクトが作成されます。

  • ファイルのタイムスタンプを設定するには、次のようなコマンドを使用します。
Set-ItemProperty -Path "example.txt" -Name CreationTime -Value $NewDate Set-ItemProperty -Path "example.txt" -Name LastWriteTime -Value $NewDate

これは作成日時と最終更新日時の両方を更新します。慣れてしまえば非常に簡単です。

PowerShellで最終アクセス時刻を調整する

念のため、最後に開いたタイムスタンプも変更したい場合は、以下を追加してください。

Set-ItemProperty -Path "example.txt" -Name LastAccessTime -Value $NewDate

こうすることで、ファイルは指定した日付に開かれたばかりのように見えます。これは、特に監査ログやファイルの並べ替えなどで、最近のアクティビティを偽装したい場合に便利です。

PowerShell を使用して複数のファイルを一括更新する

PowerShellの真の強みはバッチ処理です。Get -ChildItemコマンドレットを使用して複数のファイルを対象にし、それぞれをループ処理することができます。

Get-ChildItem -Path "C:\Path\To\Files\*.txt" | ForEach-Object { Set-ItemProperty -Path $_. FullName -Name CreationTime -Value $NewDate Set-ItemProperty -Path $_. FullName -Name LastWriteTime -Value $NewDate }

ファイルがサブフォルダの奥深くにある場合は、-Recurseを追加してすべてを収集します。

Get-ChildItem -Path "C:\Path\To\Files" -Recurse -Filter "*.txt" | ForEach-Object { Set-ItemProperty -Path $_. FullName -Name CreationTime -Value $NewDate Set-ItemProperty -Path $_. FullName -Name LastWriteTime -Value $NewDate }

PowerShellは一致するすべてのファイルを問題なく処理します。複数行のコマンドの場合は、Shift + Enter各行の後にEnterキーを押し、最後の行はEnterキーのみで入力してください。

よくある質問

Windowsにおけるファイルタイムスタンプ属性とは何ですか?

それらは、ファイルが作成された日時、最後に変更された日時、最後にアクセスされた日時を教えてくれます。いわばデジタル指紋のようなものです。

CMDコマンドはツールを使わずにファイルのタイムスタンプを変更できますか?

いいえ、Windowsにはそのためのネイティブコマンドはありません。NirCmdなどのツールが必要になります。

この作業にはPowerShellの方がCMDよりも適していますか?

もちろんです。PowerShellはタイムスタンプの設定をネイティブにサポートしており、より詳細な制御とバッチ処理オプションを提供します。

NirCmdはどのような日付形式を必要としますか?

dd-mm-yyyy hh:mm:ss の形式を使用してください。そうしないと、誤動作したり、壊れたりする可能性があります。

複数のファイルに対して一度にこの操作を行うことはできますか?

はい、PowerShellとCMD(NirCmd使用時)はどちらもバッチ処理をサポートしているので、各ファイルを手動で処理する必要はありません。

管理者権限は必要ですか?

通常はそうです。特にシステムファイルや保護されたフォルダ内のファイルのタイムスタンプを変更する場合はそうです。権限の問題を避けるためにも、管理者として実行することをお勧めします。