Windows ファイル操作関係
目次
- 目次
- ファイルハッシュの取得方法
- ファイルのタイムスタンプを変更する
- ファイル名が長すぎる/不正な文字を含んでしまったファイルの扱い
- 巨大なファイルを一瞬で作成する
- 小さなファイルを大量に作成する
- コマンドの所要時間を測定する
ファイルハッシュの取得方法
CertUtil [オプション] -hashfile (ファイル名) [HashAlgorithm] 例)setup.exe のハッシュを取得する dos>certutil.exe -hashfile D:\setup.exe SHA1 ハッシュ (対象 D:\setup.exe): 47b7f8aa4f6fb110a9d6b19ea28f95d8773c2cb6 CertUtil: -hashfile コマンドは正常に完了しました。
補足
ファイルのタイムスタンプを変更する
sp -path C:\Windows\fonts\EUDC.TTE -n lastwritetime -va $( date '2019/01/01 00:00:00' )
ファイル名が長すぎる/不正な文字を含んでしまったファイルの扱い
以下の様にファイル名が超長くなってしまう、もしくは不正な文字が含まれてしまうと、エクスプローラでは名前を変えることも、移動することも、削除することもできなくなってしまうことがあります。
D:\~長いディレクトリ名~\~長いファイル名~
そんなときは、コマンドプロンプトを開き、Delコマンドでファイル名の前に \\?\ を付けることで、削除することができます。
ディレクトリ名を指定すると、中のファイルがすべて消えますので、ご注意ください。
dos>del "\\?\D:\~長いディレクトリ名~\" \\?\D:\~長いディレクトリ名~\*、よろしいですか (Y/N)? y
- 上記の半角バックスラッシュは、半角¥記号と同じです。
参考
- NTFS ファイル システム上のファイルまたはフォルダを削除できない
https://support.microsoft.com/ja-jp/help/320081/you-cannot-delete-a-file-or-a-folder-on-an-ntfs-file-system-volume
巨大なファイルを一瞬で作成する
以下のコマンドで、指定したサイズの新しいファイルを作成することができます。
fsutil file createNew (ファイル名) (サイズ(バイト))
例)1GBのファイルを作成する
dos>fsutil file createNew D:\Work\test.txt 1073741824
ファイル D:\Work\test.txt が作成されました
小さなファイルを大量に作成する
以下のループ文で必要回数ファイル作成処理を繰り返すことで作成できます。
for /L %i in ( 初期値, 増分, 終了値) ファイル出力コマンド
例)10バイトのファイルを10万個作成する dos>for /L %i in (1, 1, 100000) do echo abcdefghij > test_%i.txt
参考まで。
当方の環境での所要時間は以下の通りでした。
・ファイル 10万個作成するのに、約132秒
・ファイル 100万個作成するのに、約1772秒(29m 32s)
・ファイル 10万個を削除するのに、約46秒
・ファイル 100万個を削除するのに、約505秒(8m 25s)
なお、100万個のファイルが入ったディレクトリをエクスプローラで開くと、Windowsが応答しなくなってしまいますのでご注意ください。
※記事の環境:Windows 10 Pro、CPU:Core i7- 9700K 3.60GHz、Mem:32.0GB、SSD
コマンドの所要時間を測定する
コマンドの実行にかかった時間を測定します。
PowerShell の Measure-Command を使用することで、簡単に測定できます。
PowerShell -Command "Measure-Command {(測定したいコマンド)}"
測定結果は、色々な単位で表示されますが、[TotalSeconds] の値が見やすいでしょうか。
ファイルの削除にかかった時間を測定する。 dos>powershell -Command "Measure-Command {del test_*.txt }" Days : 0 Hours : 0 Minutes : 0 Seconds : 46 Milliseconds : 57 Ticks : 460571566 TotalDays : 0.00053306894212963 TotalHours : 0.0127936546111111 TotalMinutes : 0.767619276666667 TotalSeconds : 46.0571566 ←これ TotalMilliseconds : 46057.1566