Linuxのコマンド「touch」のWindows相当品?
Windowsでファイルの日付変更フィールドを更新したいときに何を使いますか?
- C++, .NET, C# などの Windows ネイティブなもの(できれば Vista が望ましい)からアクセス可能な commands
- 誰かがC++、C#、 WSH または類似の何かを介してこれを行う方法を知っている場合は、よくて良い、他のすべてがリンクされた質問でカバーされていると思うだろうと思います。
Windowsでファイルの日付変更フィールドを更新したいときに何を使いますか?
私は、多くの一般的な Unix ユーティリティの Win32 ネイティブポートである unxutils を使用して推奨しています。この中には touch
コマンドがあります。
ファイルの最終更新日を変更したいだけなら(私の場合):
C:\> powershell (ls your-file-name-here).LastWriteTime = Get-Date
type nul >>file & copy file +,,
file
を作成します。 cmd
では動作します。私は次のように提案します: :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"
@dash-tom-bang:
謎の ‘+’ とカンマについての Technet の説明は以下の通りです:
copy /b Source+,
カンマは Destination パラメータの省略を示しています。
コピーコマンドは、複数のファイルを単一の宛先ファイルにマージすることをサポートしています。コマンドプロンプトで空白の保存先をスペース文字で指定することはできませんので、2つのカンマでそのことを示します。
そして、これはTechnetのコピーコマンドのリファレンスです。 http://technet.microsoft.com/en-us/library/bb490886.aspx
自分でコーディングしたいと思ったら、.NETには File.SetLastAccessTime
、 File.SetCreationTime
、 File.SetLastWriteTime
のメソッドが用意されています。
GnuWin32](http://gnuwin32.sourceforge.net/)プロジェクトは、UnixコマンドラインユーティリティのGnu版をWindowsに移植したものです。`touch` には CoreUtils パッケージが必要です。
以下は、Windows エクスプローラで右クリックで “touch "を追加のために書いた簡単なregfileです。スクリプトを書くのも簡単です。
多くのunixコマンドのwin32ネイティブポート ](http://sourceforge.net/projects/unxutils), touchを含む。
以前に使ったことがありますが、インストールやDLLなどは不要で、問題なく動作します。
CodeProject ](http://www.codeproject.com/KB/applications/touch_win.aspx)からこれを試してみてください。
また、 Cygwin をインストールすると、Touchや他の*NIXコマンドの茄多を提供します。
多くの Unix ユーティリティの Windows 版があります。unxutils ](http://unxutils.sourceforge.net/) や GnuWin32 プロジェクトを見てください。
Stack Overflowの 似たような質問 から。
タイムスタンプの更新(touch
の他の機能は無視して)には、次のようにします:
copy /b filename.ext +,,
codeproject「Touch for Windows」はどうでしょうか。 http://www.codeproject.com/KB/applications/touch_win.aspx
edit; ここと同じ質問です。 https://stackoverflow.com/questions/51435/windows-version-of-the-unix-touch-command/51439
次のものをあなたの %windir%\system32 フォルダの touch.bat として保存するか、またはそれがあなたの 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
参照。Microsoft KB 69581 ](http://support.microsoft.com/kb/69581)
私は、別のファイルからファイルの日付を複製/クローンの'タッチ'機能を望んでいた、ネイティブで、バッチファイルから使用可能である。
だからバッチファイルに'ドラッグアンドドロップ'ビデオファイルを、FFMPEGが実行され、入力ファイルから'作成された日付'と'変更された日付'は、出力ファイルにコピーされます。
これは、バッチファイルがユニコードファイル名の処理でひどいです見つけるまで、最初は簡単に思えましたが、インラインのPowerShellは、ファイル名のシンボルを混乱させ、それらをエスケープするダブルは悪夢です。 ps1'とそれが含まれています:
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を実行できるようにしてくれます。
これは元の質問とは少し関係のないことですが、私はこれがGUIのためにWindows上で非常に便利であることを見つけます。
私はGUI(エクスプローラシェルにビルド)を提供するTouchProユーティリティを使用しています: http://www.jddesign.co.uk/products/touchpro/touchpro.htm
上記の5つの選択肢に加えて、ここでは触れられていない3つの選択肢がSuperUserにあります: “Windows Recursive Touch Command”
これも必要だったので、これを行うシェル拡張を自分で作ってみました。これは AllSorts これもオープンソースにしました ここ
Unixの人たちは、touchコマンドで任意のファイルのファイル日付を更新するという一般的な問題を修正しました。しかし、Windowsの場合は、特別なケースのために、時々、より簡単な方法が可能です。
私は、アプリケーションタイルの背景色を変更するために、Windows 8.1でアプリケーションショートカットのタイムスタンプを更新する必要があります、 このSOの質問 を参照してください。上記の巧妙なツールの1つを実装するよりも、ショートカットのコメントフィールドを編集する方が簡単だと思います。ほとんどの人はこれを空のままにしていますが、もちろん、有用なコメントはすぐに思いつきます。そして、コメントが存在する場合、最終ピリオドを追加したり削除したりしても決して害はありません。
古い質問で申し訳ありませんが、私はWindows 10システムでtouchを発見したばかりです。ここ ](https://git-for-windows.github.io/)(だと思います)からGitをダウンロードしてインストールしたのですが、どうやらtouchをはじめとする様々なユーティリティがbinフォルダに入っているようです。