Windows 7で、日付/時刻スタンプを更新するために、ディレクトリ(サブディレクトリを含む)内のすべてのファイルを再帰的にタッチするにはどうすればよいですか?
Windows 7にはこれを実現するメカニズムがありますか?
Windows 7で、日付/時刻スタンプを更新するために、ディレクトリ(サブディレクトリを含む)内のすべてのファイルを再帰的にタッチするにはどうすればよいですか?
Windows 7にはこれを実現するメカニズムがありますか?
回答:
いくつかの可能性があります。
Unixののポートを使用してtouch
コマンドと単純に組み合わせるfind
とtouch
Unixの方法インチ いくつかの選択肢があります。よく言及されるのはGNUWin32、cygwin、およびunxutilsですです。あまり知られていませんが、いくつかの点では優れていますが、SFUAユーティリティツールキットのツールは、Windows 7 UltimateエディションとWindows Server 2008 R2が同梱されているUNIXベースアプリケーション用サブシステムで実行されます。(Windows XPの場合、1が可能ダウンロードしてインストールUNIXバージョン3.5のためのサービスを。)このツールキットには、コマンドラインTUIツールの数が多いからmv
とdu
、KornシェルとCシェルを通じて、へperl
およびawk
。x86-64とIA64の両方のフレーバーとx86-32があります。これらのプログラムは、cygwin1.dll
Win32上に物事を重ねるエミュレータDLL(など)ではなく、Windowsのネイティブの適切なPOSIX環境で実行されます。そして、はい、ツールキットにはとがtouch
ありfind
、その他約300があります。
これらのツールキットにはすべて、もちろん、ファイルごとに個別のプロセスを実行するという既知の欠点があります。これは、次の選択肢の問題ではありません。
touch
人々が書いて公開した多くのネイティブWin32 コマンドの1つを使用します。 それらの多くは、Unix find
がそれらをラップする必要なしに、再帰を実行するオプションをサポートします。(彼らは、すべての後に、探しているユーザーベースのターゲットtouch
、それは移植のUnixコマンドの全体の負荷を持っていないので、コマンドを。)その一つであるステファン・Duguayのtouch
あなたが持って見ることができるようにどの--recursive
オプションを選択します。
CMDの不可解な謎を巧みに利用してください。 他の回答で述べたように、コマンドCOPY /B myfile+,,
のあまり知られていない「プラス」構文を使用して、ファイルの最終変更日付スタンプを更新しますCOPY
(詳細については、ちなみにここにあります)。FOR /R
ここで別の回答で示唆されているように、これをもちろん組み合わせて操作を再帰的に実行できます。
代替コマンドインタープリターを使用し、CMDよりも賢くなく、わかりやすくしてください。 JP SoftwareのTCC / LEもその1つです。これは、追加/S
のオプションのCOPY
コマンドを 1で使用できることを意味し、COPY /S
する必要なくすために「プラス」の構文でFOR
ラッパーを。ただし、TCC / LEにはオプションを直接サポートするTOUCHコマンドが組み込まれていることを考えると、それでも実際には不必要に自分自身の生活を難しくしてい/S
ます。
COPY /B file+,,
追加方法は不要です... :
(ls file).LastWriteTime = DateTime.now
既存のWindows機能のみを使用する(追加するものは何もインストールしない)には、次のいずれかを試してください。
forfiles /P C:\Path\To\Root /S /C "cmd /c Copy /B @path+,,"
(指定されたパスで始まるすべてのファイルを再帰的に「タッチ」)
または
forfiles /S /C "cmd /c Copy /B @path+,,"
(現在のディレクトリで始まるすべてのファイルを再帰的に「タッチ」)
これはおそらく少し遅すぎるかもしれませんが、他の誰かが同じものを必要とする場合に備えて、答えを残しておきます。
John Tの答えはWindows 7では機能しませんでした。いくつかの調査の後、SKTimeStampと呼ばれるこのユーティリティを見つけました。、。
これがどのように機能するかについての詳細を含む記事は次のとおりです:http : //www.trickyways.com/2009/08/how-to-change-timestamp-of-a-file-in-windows-file-created-modified-and -アクセス/。
実行する必要がある手順は次のとおりです。
出来上がり!すべてのファイルが更新されました!UNIXのユーティリティやコマンドラインは不要です。
PowerShellを使用して:
C:\> powershell (ls your-file-name-here).LastWriteTime = Get-Date
The property 'LastWriteTime' cannot be found on this object.
上記のジョンTの回答を参照してください。
find
のexecコマンドを終了することと、\;
と `+ 'ていました(後者については知りませんでした)。
これは役に立ちました:(ここから)
-exec command ;
コマンドを実行します。0ステータスが返された場合はtrue。findに続くすべての引数は、 ';'で構成される引数までコマンドの引数と見なされます 遭遇します。文字列 '{}'は、コマンドの引数で発生するすべての場所で処理される現在のファイル名に置き換えられます。findの一部のバージョンのように、それが単独の引数だけでなく。
-exec command {} +
この-execアクションのバリアントは、選択されたファイルに対して指定されたコマンドを実行しますが、コマンドラインは、選択された各ファイル名を最後に追加することによって構築されます。コマンドの呼び出しの総数は、一致するファイルの数よりもはるかに少なくなります。コマンドラインは、xargsがコマンドラインを作成するのとほぼ同じ方法で作成されます。コマンド内では '{}'の1つのインスタンスのみが許可されます。コマンドは開始ディレクトリで実行されます。
c:\myfolder
2つのファイルa.txt
を含むフォルダーとb.txt
find . -type f -exec touch {} +
次のように解釈されます:touch a.txt b.txt
find . -type f -exec touch {} \;
として解釈されます:touch a.txt
touch b.txt
したがって、#1ははるかに高速です(ただし、次のコマンドにexec
は{}
プレースホルダーを1つしか持てないという制限もあります)。