2009-07-21 21:44:38 +0000 2009-07-21 21:44:38 +0000
179
179

Linuxのコマンド「touch」のWindows相当品?

Windowsでファイルの日付変更フィールドを更新したいときに何を使いますか?

  1. C++, .NET, C# などの Windows ネイティブなもの(できれば Vista が望ましい)からアクセス可能な commands
  2. 誰かがC++、C#、 WSH または類似の何かを介してこれを行う方法を知っている場合は、よくて良い、他のすべてがリンクされた質問でカバーされていると思うだろうと思います。

回答 (27)

162
162
162
2008-09-09 09:13:05 +0000

私は、多くの一般的な Unix ユーティリティの Win32 ネイティブポートである unxutils を使用して推奨しています。この中には touch コマンドがあります。

99
99
99
2011-09-09 14:18:55 +0000

ファイルの最終更新日を変更したいだけなら(私の場合):

C:\> powershell (ls your-file-name-here).LastWriteTime = Get-Date
58
58
58
2011-02-16 15:21:00 +0000
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"
33
33
33
2009-11-25 10:51:32 +0000

@dash-tom-bang:

謎の ‘+’ とカンマについての Technet の説明は以下の通りです:

copy /b Source+,

カンマは Destination パラメータの省略を示しています。

コピーコマンドは、複数のファイルを単一の宛先ファイルにマージすることをサポートしています。コマンドプロンプトで空白の保存先をスペース文字で指定することはできませんので、2つのカンマでそのことを示します。

そして、これはTechnetのコピーコマンドのリファレンスです。 http://technet.microsoft.com/en-us/library/bb490886.aspx

23
23
23
2009-07-22 05:59:04 +0000

自分でコーディングしたいと思ったら、.NETには File.SetLastAccessTime File.SetCreationTime File.SetLastWriteTime のメソッドが用意されています。

21
21
21
2012-07-13 14:54:37 +0000

ここでは powershell を使用して再帰的なバージョンです… これは、すべてのファイルとサブディレクトリ、およびこのディレクトリのサブディレクトリ

ps c:myDir> Get-ChildItem . * -recurse | ForEach-Object{$_.LastWriteTime = get-date}
``` 内のファイルの最終更新時刻を変更します。
15
15
15
2008-09-09 09:17:29 +0000

cygwin には touch が付属しています。フレームワーク全体をインストールしたくないとおっしゃっていたと思いますが、cygwinはかなり軽量で、Unix的なコマンドライン全体をONにしなくてもDOSのコマンドウィンドウから呼び出すことができます。

インストールするツールをコントロールすることもできるので、単にtouch.exeファイルをインストールして、残りのフレームワークを残しておくという方法もあります。

15
15
15
2008-09-09 09:18:05 +0000
15
15
15
2013-07-10 11:52:23 +0000

バッチスクリプトで空のファイルを作成するためにこれを試してみました。以下のようにしてください:

ECHO text>file1.txt
14
14
14
2009-07-21 22:03:00 +0000

以下は、Windows エクスプローラで右クリックで “touch "を追加のために書いた簡単なregfileです。スクリプトを書くのも簡単です。

13
13
13
2008-09-09 09:13:36 +0000

多くのunixコマンドのwin32ネイティブポート ](http://sourceforge.net/projects/unxutils), touchを含む。

以前に使ったことがありますが、インストールやDLLなどは不要で、問題なく動作します。

11
11
11
2008-09-09 09:19:08 +0000

CodeProject ](http://www.codeproject.com/KB/applications/touch_win.aspx)からこれを試してみてください。

  • インストールする必要はありません。
9
9
9
2009-07-21 21:49:43 +0000

また、 Cygwin をインストールすると、Touchや他の*NIXコマンドの茄多を提供します。

5
5
5
2009-07-21 21:55:15 +0000

多くの Unix ユーティリティの Windows 版があります。unxutils ](http://unxutils.sourceforge.net/) や GnuWin32 プロジェクトを見てください。

5
5
5
2011-02-28 18:10:16 +0000

Stack Overflowの 似たような質問 から。

タイムスタンプの更新(touchの他の機能は無視して)には、次のようにします:

copy /b filename.ext +,,
4
4
4
2009-07-21 21:45:42 +0000

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

3
3
3
2012-09-28 14:14:07 +0000

git をひとつ以上のプロジェクトで使っている場合、mingw ベースの git-bash for Windows には touch コマンドがあります。Windows 用の ‘nix ユーティリティが存在することを指摘してくれた @greg-hewgill に感謝したいと思います。

3
3
3
2015-06-17 00:23:57 +0000

PowerShellで試してみてください:

ni fileName.txt

NI は、New-Item cmdletのエイリアスです。

2
2
2
2009-08-07 15:53:46 +0000

あなたがvimがインストールされている場合、私はそれを行うための簡単な方法を見つけました(大きなファイルのために偉大ではない、それを閉じてからファイル全体を開きます…)

vim foobar.txt +wq!

“+"は、次のコマンドを実行するために引数を設定します。"wq!"は "write, quit, force "です。これは、ファイルを開いて、保存をして、その後すぐに閉じます。

2
2
2
2012-11-11 01:27:44 +0000

次のものをあなたの %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)

2
2
2
2018-02-18 21:50:03 +0000

私は、別のファイルからファイルの日付を複製/クローンの'タッチ'機能を望んでいた、ネイティブで、バッチファイルから使用可能である。

だからバッチファイルに'ドラッグアンドドロップ'ビデオファイルを、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を実行できるようにしてくれます。

1
1
1
2012-10-02 14:30:49 +0000

これは元の質問とは少し関係のないことですが、私はこれがGUIのためにWindows上で非常に便利であることを見つけます。

私はGUI(エクスプローラシェルにビルド)を提供するTouchProユーティリティを使用しています: http://www.jddesign.co.uk/products/touchpro/touchpro.htm

1
1
1
2017-05-10 17:46:52 +0000

まあ、本当にtouchコマンドを利用できるようにしたいのであれば、これをtouch.batというバッチファイルに入れて、C:\Windowsに貼り付ければいいのです:

TYPE NUL >>%1

簡単なことです。

1
1
1
2011-02-28 19:57:38 +0000

上記の5つの選択肢に加えて、ここでは触れられていない3つの選択肢がSuperUserにあります: “Windows Recursive Touch Command”

0
0
0
2019-04-11 17:41:41 +0000

これも必要だったので、これを行うシェル拡張を自分で作ってみました。これは AllSorts これもオープンソースにしました ここ

0
0
0
2015-05-28 10:14:59 +0000

Unixの人たちは、touchコマンドで任意のファイルのファイル日付を更新するという一般的な問題を修正しました。しかし、Windowsの場合は、特別なケースのために、時々、より簡単な方法が可能です。

私は、アプリケーションタイルの背景色を変更するために、Windows 8.1でアプリケーションショートカットのタイムスタンプを更新する必要があります、 このSOの質問 を参照してください。上記の巧妙なツールの1つを実装するよりも、ショートカットのコメントフィールドを編集する方が簡単だと思います。ほとんどの人はこれを空のままにしていますが、もちろん、有用なコメントはすぐに思いつきます。そして、コメントが存在する場合、最終ピリオドを追加したり削除したりしても決して害はありません。

0
0
0
2015-12-26 20:40:13 +0000