Windowsでファイルの日付変更フィールドを更新したい場合はどうしますか?
編集:CheapScotsman で指摘されているように、すでにアプリケーション用のページがあります 。
私がC++、C#、 WSH 、またはそれに似たものを使ってこれを行うことができる方法を誰かが知っていれば、他のすべてがカバーされると思うリンク先の質問に.
ウィンドウを使用してファイルの日付スタンプをタッチする場合は、コマンドプロンプトで次のコマンドを使用します。
copy /b filename.ext +,,
(filename.ext
はあなたのファイルの名前です) +,,
はcopy
に対する特別なフラグで、ファイルの日付/時刻を単純に 更新するように指示します :
*ファイルの日時を変更する
ファイルを変更せずに現在の日時をファイルに割り当てるには、次の構文を使用します。
copy /b Source+,,
コンマは、Destinationパラメーターの省略を示します。
LumiとJustinによるコメントに基づいて編集します。これをバッチファイルに入れます。 touch.cmd
@COPY /B %1+,, %1
ファイルが現在のディレクトリ(Windows 7でテスト済み)にない場合でもこれは機能します。
私は unxutils を使用し、推奨しています。これは、多くの一般的なUnixユーティリティのネイティブWin32ポートです。そこにtouch
コマンドがあります。
必要なのがファイルの最終更新日を変更することだけです(これは私の場合でした)。
C:\> powershell (ls your-file-name-here).LastWriteTime = Get-Date
type nul >>file & copy file +,,
file
が存在しない場合は作成します。cmd
ビルトインを使うだけです。UPDATE
ああ!これは読み取り専用ファイルでは機能しませんが、touch
は機能します。私は提案します:
:touch
if not exist "%~1" type nul >>"%~1"& goto :eof
set _ATTRIBUTES=%~a1
if "%~a1"=="%_ATTRIBUTES:r=%" (copy "%~1"+,,) else attrib -r "%~1" & copy "%~1"+,, & attrib +r "%~1"
@ダッシュトムバン:
Technetが神秘的な「+」とコンマについて説明します。
コピー/ bコピー元+ ,
コンマは、Destinationパラメーターの省略を示します。
Copyコマンドは、複数のファイルを単一のコピー先ファイルにマージすることをサポートしています。コマンドプロンプトで空白文字を使用して空白文字を指定することはできないので、2つのカンマを使用してそれを示すことができます。
Technetのコピーコマンドリファレンスです。 http://technet.Microsoft.com/ja-jp/library/bb490886.aspx
自分でコーディングしたい場合は、 File.SetLastAccessTime
、 File.SetCreationTime
を.NETで提供しています。 )および File.SetLastWriteTime
メソッド。
これはpowershellを使用した再帰的バージョンです。これはすべてのファイルとサブディレクトリ、およびこのディレクトリのサブディレクトリ内のファイルの最終更新時刻を変更します。
ps c:myDir> Get-ChildItem . * -recurse | ForEach-Object{$_.LastWriteTime = get-date}
私はこれを私のバッチスクリプトに空のファイルを作成することを試みました。これを使うことができます:
ECHO text>file1.txt
cygwin
にはtouch
が付きます。私はあなたがあなたが全体のフレームワークをインストールしたくないと言ったことを知っています、しかしcygwinは非常に軽量で、全体のunixのようなコマンドラインをオンにしなくてもdosコマンドウィンドウから呼び出すことができます。
どのツールをインストールするかを制御することもできるので、touch.exe
ファイルをインストールして、残りのフレームワークをそのままにすることができます。
これは私が Windowsエクスプローラで右クリック "touch"を追加するために書いた簡単なregfileです 。スクリプトを呼び出すのは簡単です。
cmd.exe /c copy %1+nul %1 /by
多くのunixコマンドのネイティブwin32ポート 、touchを含む。
私は以前にそれを使ったことがあり、うまくいった - インストールもDLLもなしなど
CodeProject からこれを試してください。
また、 Cygwin をインストールすることで、Touchだけでなく他の* NIXコマンドも多数使用できるようになります。
webサイトから:
Funduc Software Touch は、1つ以上のファイルの日付/時刻や属性スタンプを変更できる無料の「touch」ユーティリティです。さらに、FS Touchでは、既存のファイル時間から指定した秒数を増減できます。どのファイルやサブディレクトリを変更するかは 'complex file masks'で指定できます。プログラムは対話式またはコマンドラインから実行できます。バージョン7.2で新しく追加されたのは、ファイル修正タイムスタンプを+/-指定された秒数に変更するためのコマンドラインスイッチです。
FS Touchは、Windows XP、Vista、Windows 7、およびWindows 8で動作します。
このコンテンツはregファイルに保存することができます。これにより、 "Touch File"機能を持つすべてのファイルの右クリックコンテキストメニューが追加されます(Windows 7でテスト済み)。以下の行をregファイルにコピーallしてください。ファイルを実行して質問を承認します。任意のファイル(または複数のファイル)を右クリック - "Touch File"オプションが利用可能になりました。
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\Shell]
[HKEY_CLASSES_ROOT\*\Shell\Touch File]
[HKEY_CLASSES_ROOT\*\Shell\Touch File\command]
@="cmd /C copy /b \"%1\" +,,"
Codeproject "Touch for Windows"はどうですか: http://www.codeproject.com/KB/applications/touch_win.aspx
編集します。ここと同じ質問: https://stackoverflow.com/questions/51435/windows-version-of-the-unix-touch-command/51439
1つ以上のプロジェクトにgitを使用している場合は、mingwベースのWindows用git-bash
にtouch
コマンドがあります。 Windows用の 'nixユーティリティがあることを私に指摘してくれた@ greg-hewgillに感謝したい。それは、git-bashで触ってみることを考えさせられたからである。
私はあなたがvimをインストールしているならそれをする簡単な方法を見つけました(大きなファイルには不向きです、ファイル全体を開いてそれを閉じるでしょう...)
vim foobar.txt +wq!
"+"は以下のコマンドを実行するための引数を設定します。 "wq!" 「書き込み、終了、強制」です。これでファイルが開き、保存が行われ、その後すぐに閉じられます。
以下をtouch.batとして%windir%\ system32フォルダに保存するか、またはPATH環境変数に保存されているフォルダを追加します。
@echo off
if %1.==. goto end
if not exist %1 goto end
copy /b %1 +,, > nul
echo %1 touched!
:end
使用例
touch *.cpp
touch somefile.c
私はネイティブで、そして他のファイルからファイルの日付をクローン化/複製する「タッチ」機能が欲しいと思いました。
そのため、ビデオファイルをバッチファイルに「ドラッグアンドドロップ」してFFMPEGを実行し、入力ファイルの「作成日」と「変更日」を出力ファイルにコピーします。
バッチファイルがUnicodeファイル名を処理するのにひどい、インラインのPowerShellがファイル名のシンボルでめちゃくちゃになる、そしてそれらを二重にエスケープすることが悪夢になるまで、これは最初は簡単そうに見えました。
私の解決策は、 'touch'部分を 'CLONE-FILE-DATE.ps1'と呼んだ別のPowerShellスクリプトにすることでした。
param
(
[Parameter(Mandatory=$true)][string]$SourcePath,
[Parameter(Mandatory=$true)][string]$TargetPath
)
(GI -LiteralPath $TargetPath).CreationTime = (GI -LiteralPath $SourcePath).CreationTime
(GI -LiteralPath $TargetPath).LastWriteTime = (GI -LiteralPath $SourcePath).LastWriteTime
それからこれが私の 'CONVERT.BAT'バッチファイル内での使用例です:
%~dp0\ffmpeg -i "%~1" ACTION "%~1-output.mp4"
CHCP 65001 > nul && PowerShell -ExecutionPolicy ByPass -File "%~dp0\CLONE-FILE-DATE.PS1" "%~1" "%~1-output.mp4"
私はPowerShellが読みやすいと思うので、バッチについて説明します。
%〜dp0は、バッチファイルの現在のディレクトリです。
%〜1は、引用符なしでバッチにドロップされたファイルのパスです。
CHCP 65001> nulは文字をUTF-8に設定し、出力を飲み込みます。
- ExecutionPolicy ByPassを使用すると、グローバルポリシーを変更することなくPowerShellを実行できます。これは、ユーザーが誤ってスクリプトを実行するのを防ぐためです。
やってみる
fsutilファイルcreatenew new.txt 0
上記の5つの選択肢に加えて、ここでは触れていない3つの選択肢がSuperUserにあります。 "Windows Recursive Touch Command"
これは元の質問とは少し関係がありませんが、GUIを使用するため、Windowsでは非常に便利です。
私はGUI(Explorer Shellに組み込まれています)を提供するTouchProユーティリティを使用しています。
touch
コマンドを利用可能にしたい場合は、reallyにして、これをtouch.bat
というバッチファイルに入れてC:\Windows
に貼り付けることができます。
TYPE NUL >>%1
とても簡単です。
Unixの人々は、touchコマンドでファイルのファイル日付を更新するという一般的な問題を修正しました。しかし、Windowsでは、特別な場合にはもっと簡単な方法が可能です。
表示されているアプリケーションタイルの背景色を変更するには、Windows 8.1でアプリケーションショートカットのタイムスタンプを更新する必要があります。 this SO question を参照してください。上記の巧妙なツールの1つを実装するよりも、ショートカットのコメントフィールドを編集する方が簡単だと思います。ほとんどの人はこれを空のままにしていますが、もちろん、有用なコメントがすぐに想像されます。また、コメントがある場合は、最後の期間を追加または削除しても悪影響はありません。
私はこれが古い質問であることを理解しています、私はちょうど私のWindows 10システムで接触を発見しました。ここから からGitをダウンロードしてインストールしました (これはtouchと他のさまざまなユーティリティがbinフォルダに入っているようです)。