Setara dengan Windows perintah 'sentuh' Linux?


175

Apa yang Anda gunakan ketika Anda ingin memperbarui bidang file yang dimodifikasi tanggal pada Windows?

  1. perintah yang dapat diakses melalui C ++, .NET, C #, atau sesuatu yang asli dari Windows (Vista lebih disukai)
  2. alat / aplikasi lebih disukai gratis, dan jika memungkinkan open source juga

Sunting: sudah ada halaman untuk aplikasi seperti yang ditunjukkan oleh CheapScotsman di sini .

Kalau ada yang tahu bagaimana saya bisa melakukan ini melalui C ++, C #, WSH atau sesuatu yang serupa, baik dan bagus, kalau tidak saya akan berpikir semuanya tercakup dalam pertanyaan terkait.


Empat alternatif yang disebutkan di atas, ditambah empat lagi yang tidak disebutkan di sini, dapat ditemukan dalam jawaban untuk pertanyaan yang serupa: "Windows Recursive Touch Command"
JdeBP

stackoverflow.com/questions/210201/… menyebutkan sebuah muatan, termasukREM.>a
barlop

Jawaban:


356

Jika Anda ingin menyentuh cap tanggal file menggunakan windows, gunakan perintah berikut di prompt perintah:

copy /b filename.ext +,,

(di mana filename.extnama file Anda) Ini +,,adalah tanda khusus untuk copymemberitahukannya agar cukup memperbarui tanggal / waktu pada file :

* Mengubah waktu dan tanggal suatu file

Jika Anda ingin menetapkan waktu dan tanggal saat ini untuk file tanpa mengubah file, gunakan sintaks berikut:

copy /b Source+,,

Koma menunjukkan penghilangan parameter Tujuan.

Edit berdasarkan komentar oleh Lumi dan Justin: masukkan ini dalam file batch, mis. touch.cmd

@COPY /B %1+,, %1

Ini berfungsi bahkan jika file tersebut tidak ada di direktori saat ini (diuji pada Windows 7).


4
Ini akan lambat jika file berukuran besar.
mob

14
type touch.batadalah @echo offdan baris berikutnya copy /b %1 +,,- masukkan ke dalam C:\binatau apa yang Anda miliki untuk skrip Anda sendiri, dan kemudian Anda dapat menggunakannya seperti touch myfile.txt.
Lumi

17
Di Win7 ini tidak akan berfungsi jika Anda tidak berada di folder yang berisi file. Ini akan membuat salinan di direktori kerja saat ini.

6
Jika Anda perlu melakukan ini di folder jauh (jalur UNC) - Anda harus menentukan tujuan ke perintah salin juga - copy /b Source+,, Source- di mana Sourcetermasuk path lengkap ke file
Justin


162

Saya telah menggunakan dan merekomendasikan unxutils yang merupakan port asli Win32 dari banyak utilitas Unix yang umum. Ada touchperintah di sana.


6
Seperti hampir setiap port unix-to-windows sebelumnya, ini gagal untuk bekerja dengan karakter unicode di nama file di luar encoding ditetapkan sebagai default untuk program non-unicode. Uji nama file yang akan "test тест τεστ.txt"
menyandung

gnuwin32 memilikinya. tetapi memang, gnuwin32's juga gagal untuk karakter unicode.
barlop

1
Pembaruan dari 2017 Di Windows 10 kita dapat menggunakan subsistem Linux untuk windows, yang menginstal bash. Tidak perlu untuk cygwin, MinGW, unxutils atau unix parsial lainnya untuk port windows. docs.microsoft.com/en-us/windows/wsl/install-win10
Davos

@Davos sudahkah Anda mencobanya pada file apa pun selain konteks pengguna Anda (biasanya tidak terjangkau)? Karena secara teknis sisi pengguna LXSS berjalan sebagai pengguna yang tidak memiliki hak.
0xC0000022L

@ 0xC0000022L tidak yakin apa yang Anda maksud dalam konteks touchperintah. Ini seperti hal lain di lingkungan nix, Anda bisa melakukannya atau sudo, atau tidak bisa karena Anda tidak memiliki hak istimewa.
Davos

96

Jika yang Anda inginkan adalah mengubah tanggal modifikasi terakhir file (yang merupakan kasus saya):

C:\> powershell  (ls your-file-name-here).LastWriteTime = Get-Date

9
PowerShell FTW. Maksudku, serius, unix itu keren tapi PS lebih keren.
matt

1
Anda dapat memperbarui penulisan terakhir kali untuk beberapa file / folder juga

12
Ini hanya akan berfungsi pada satu file. Untuk banyak file: ls * | ForEach-Object {$ _. LastWriteTime = Get-Date}
Eli Algranti

2
Jika Anda ingin melakukannya secara rekursif, ini bekerja dengan cukup baik: gci -recu -inc " . " | % {$ _. LastWriteTime = Dapatkan-Tanggal}
BrainSlugs83

6
@ BrainSlugs83: gunakan backticks `untuk kode:gci -recu -inc "*.*" | % { $_.LastWriteTime = Get-Date }
alldayremix

58
type nul >>file & copy file +,,
  • Menciptakan filejika tidak ada.
  • Hanya menyisakan konten file.
  • Hanya menggunakan cmdbuilt-in.
  • Kedua kali akses terakhir dan waktu pembuatan diperbarui.

MEMPERBARUI

Gah! Ini tidak berfungsi pada file read-only, sedangkan touchtidak. Saya menyarankan:

: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"

Sangat disayangkan bahwa salin tidak dapat mengabaikan atribut + r seperti yang dilakukan xcopy. Atau, sangat disayangkan bahwa xcopy tidak mendukung filename +,,sintaks aneh .
Abel

Sayangnya ini tidak berfungsi (setidaknya tidak di Windows 7). Tampaknya interpreter perintah tidak memperbarui stempel waktu tujuan pengalihan jika file tersebut tidak benar-benar dimodifikasi (yaitu, tidak ada data untuk dialihkan).
Synetech

32

@ dash-tom-bang:

Berikut ini penjelasan Technet tentang '+' dan koma yang misterius:

copy / b Sumber + ,,

Koma menunjukkan penghilangan parameter Tujuan.

Perintah salin mendukung penggabungan banyak file menjadi satu file tujuan. Karena tujuan kosong tidak dapat ditentukan menggunakan karakter spasi pada prompt perintah, dua koma dapat digunakan untuk menunjukkan itu.

Dan ini adalah referensi perintah penyalinan Technet: http://technet.microsoft.com/en-us/library/bb490886.aspx


16
Nah, itu hanya sintaks yang kacau. Serius, apa yang mereka pikirkan? Perhatikan juga dokumentasi yang sama mengatakan "Tujuan: Wajib." ... Saya kagum.
sth

1
Ini sepertinya tidak bekerja di Vista ... Saya ingin tahu apakah mereka sadar?
quillbreaker

1
Berfungsi di Windows 7
Imran

5
Itu bekerja untuk saya bahkan tanpa koma: copy file.ext + Jadi dokumentasi adalah sejauh dari perilaku yang sebenarnya seperti perilaku dari harapan yang masuk akal.
Abgan

2
Ini bekerja di Windows Server 2008 tetapi hanya jika Anda berada di folder yang berisi file
FrinkTheBrave


21

di sini adalah versi rekursif menggunakan powershell ... ini akan mengubah waktu modifikasi terakhir untuk semua file dan subdirektori, dan file dalam subdirektori direktori ini

ps c:myDir> Get-ChildItem . * -recurse | ForEach-Object{$_.LastWriteTime = get-date}

2
Kurang bertele-tele tetapi hanya menggunakan singkatan standar Powershell:ls * -recurse | % { $_.LastWriteTime = Get-Date }
Jonas

15

Proyek GnuWin32 memiliki port Windows dari versi Gnu dari utilitas baris perintah Unix.

Muncul sebagai sejumlah paket terpisah dan Anda dapat menginstal hanya perintah yang Anda butuhkan tanpa dependensi lain. Untuk touchAnda akan membutuhkan paket CoreUtils .


15

cygwindatang dengan touch. Saya tahu Anda menyebutkan bahwa Anda tidak ingin menginstal seluruh kerangka kerja, tetapi cygwin cukup ringan, dan dapat dipanggil dari jendela perintah dos tanpa seluruh baris perintah unix-like dihidupkan.

Anda juga dapat mengontrol alat apa yang harus diinstal, sehingga Anda bisa menginstal touch.exefile, dan meninggalkan sisa kerangka kerja.


2
Untuk poin Anda di sini, yang perlu Anda instal adalah file touch.exe dan cygwin.dll dalam direktori untuk menggunakan alat ini. Tidak ada ketergantungan lain yang terkait dengan penggunaan alat berbasis cygwin.
Tall Jeff

1
ketika saya mencoba ini (win7x64) saya perlu 4 cygwin dll selain touch.exe: cygiconv-2.dll cygintl-8.dll cygwin1.dll cyggcc_s-1.dll
matt wilkie

15

Saya mencoba ini untuk membuat file kosong di skrip batch saya. Anda bisa menggunakan ini:

ECHO text>file1.txt

3
Ini DENGAN JAUH metode cepat terbaik .. Saya hanya perlu membuat file .gitignore, dan Windows 7 terus mengeluh "harus memasukkan nama file" dll dll echo pie>.gitignorebekerja dengan baik - terima kasih!

4
@Alex Ini tidak terkait, tetapi kesalahan windows itu karena file dimulai dengan titik. Ada hack aneh untuk menyiasatinya di Windows Explorer: buat juga file dengan tanda titik. Jadi ketik .gitignore.dan ketika Anda menekan enter Windows menghapus periode trailing. Gila, tapi berhasil.
Brad Cupit

1
Saya berharap saya bisa memberikan ini cukup upvotes yang akan menangkap popularitas pemain besar.
Jonathan Mee

1
Ini tidak membuat file kosong, file1.txt memiliki "teks" di dalamnya.
Joshua Meyers

14

Berikut adalah regfile sederhana yang saya tulis untuk menambahkan klik kanan "touch" di Windows explorer . Mudah untuk membuat skrip juga, karena hanya memanggil:

cmd.exe /c copy %1+nul %1 /by

Dan jangan lupa copy nul some_fileuntuk membuat file kosong (yang saya lihat touchpaling sering digunakan).
Joey

Ack! File zip tidak dapat diakses (sesuatu tentang brinkster22.com perlu menjadi situs pengarah). Jon, bisakah kamu memperbarui ini?
Dan7119

Bekerja pada Win7. Tidak berfungsi di WinXP: waktu file tetap sama setelah menjalankan "copy".
Egor Skriptunoff


11

Coba yang ini dari CodeProject .

  • Tidak perlu menginstal.
  • Jika mau, Anda bahkan dapat memodifikasi sumbernya.

2
Meskipun tautan ini dapat menjawab pertanyaan, lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini dan memberikan tautan untuk referensi. Jawaban hanya tautan dapat menjadi tidak valid jika halaman tertaut berubah.
Yan Sklyarenko

9

Anda juga dapat menginstal Cygwin yang memberi Anda Sentuhan serta sejumlah besar perintah * NIX lainnya.


2
tidak bisa hidup di windows tanpa cygwin.
jweede

Dan cygwin tanpa mintty cukup timpang.
Ahe


5

Dari pertanyaan serupa di Stack Overflow.

Untuk memperbarui cap waktu (mengabaikan fungsi lainnya touch), saya akan menggunakan:

copy /b filename.ext +,,

1
Ini adalah pengulangan dari jawaban Gish Domains dari 2 tahun sebelumnya, tanpa penjelasan.
fixer1234


4

dari situs web:

Funduc Software Touch adalah utilitas 'sentuh' gratis yang memungkinkan Anda untuk mengubah waktu / tanggal & / atau stempel atribut pada satu atau lebih file. Selain itu, FS Touch dapat menambah / mengurangi jumlah detik yang ditentukan dari waktu file yang ada. Anda dapat menentukan file dan subdirektori yang akan diubah melalui 'topeng file kompleks'. Program dapat dijalankan dari interaktif atau baris perintah. Baru ke versi 7.2 adalah saklar baris perintah untuk mengubah cap waktu yang diubah file +/- jumlah detik yang ditentukan.

FS Touch berjalan pada Windows XP, Vista, Windows 7, & Windows 8.


4

Konten ini dapat disimpan ke file reg. Ini akan menambahkan menu konteks klik kanan untuk semua file dengan kemampuan "Touch File" (diuji pada Windows 7). Salin semua baris berikut ke file reg. Jalankan file dan setujui pertanyaan. Klik kanan pada file apa pun (atau banyak file) - opsi "Touch File" sekarang tersedia.

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\" +,,"

3

Jika Anda menggunakan git untuk satu atau lebih proyek, mingw yang berbasis git-bashuntuk Windows memiliki touchperintah. Saya ingin mengucapkan terima kasih kepada @ greg-hewgill karena menunjukkan kepada saya bahwa 'nix utilities ada untuk windows, karena itulah yang membuat saya mencoba untuk menyentuh git-bash.


3

di PowerShell coba:

ni fileName.txt

NIadalah alias dari cmdlet Item Baru .


1
Selamat datang di SuperUser. Terima kasih untuk posting! Bisakah Anda menambahkan tautan ke situs web yang menyediakan lebih banyak informasi tentang niperintah, dan mungkin menjelaskan lebih lanjut apa yang dilakukan perintah?
hBy2Py

1
The New-Itemcmdlet tidak dapat digunakan untuk memperbarui waktu cap file yang ada.
Twisty Impersonator

Meskipun tidak memperbarui stempel waktu, ia membuat file baru, yang merupakan sentuhan. +1 dari saya.
MikeMurko

2

Simpan yang berikut ini sebagai touch.bat di folder% windir% \ system32 Anda atau tambahkan folder tempat ia disimpan ke variabel lingkungan PATH Anda:

@echo off
if %1.==. goto end
if not exist %1 goto end
copy /b %1 +,, > nul
echo %1 touched!
:end

Penggunaan sampel:

touch *.cpp
touch somefile.c

Referensi: Microsoft KB 69581


Luar biasa! Tidak ada hal eksternal, cukup salin. Dan tentu saja kebanyakan dari kita membutuhkannya sebagai strip batch :)
Bogdan Gavril MSFT

2

Saya menemukan cara cepat untuk melakukannya jika Anda telah menginstal vim (tidak bagus untuk file besar, akan membuka seluruh file kemudian menutupnya ...)

vim foobar.txt +wq!

"+" Menetapkan argumen untuk menjalankan perintah berikut. "wq!" adalah "tulis, berhenti, paksa". Ini akan membuka file, melakukan save, lalu tutup segera sesudahnya.


Tidak rumit, besar, dan tidak portabel. -1
MD XF

2

Saya ingin fitur 'touch' untuk mengkloning / menggandakan tanggal file dari file lain, secara asli, dan dapat digunakan dari file batch.

Jadi 'drag and drop' file video ke file batch, FFMPEG berjalan, kemudian 'Date Created' dan 'Date Modified' dari file input akan disalin ke file output.

Ini tampak sederhana pada awalnya sampai Anda menemukan file batch mengerikan dalam menangani nama file unicode, PowerShell in-line mengacaukan dengan simbol nama file, dan melarikan diri dua kali adalah mimpi buruk.

Solusi saya adalah menjadikan bagian 'touch' sebagai skrip PowerShell terpisah yang saya sebut 'CLONE-FILE-DATE.ps1' dan berisi:

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

Maka di sini adalah contoh penggunaan dalam file batch 'CONVERT.BAT' saya:

%~dp0\ffmpeg -i "%~1" ACTION "%~1-output.mp4"

CHCP 65001 > nul && PowerShell -ExecutionPolicy ByPass -File "%~dp0\CLONE-FILE-DATE.PS1" "%~1" "%~1-output.mp4"

Saya pikir PowerShell dapat dibaca, jadi hanya akan menjelaskan batch yang berbicara:

% ~ dp0 adalah direktori saat ini dari file batch.

% ~ 1 adalah path file yang jatuh ke batch tanpa tanda kutip.

CHCP 65001> nul mengatur karakter ke UTF-8 dan menelan output.

-ExecutionPolicy ByPass memungkinkan Anda untuk menjalankan PowerShell tanpa perlu mengubah kebijakan global, yang ada untuk mencegah orang-orang secara tidak sengaja menjalankan skrip.


1

Mencoba

file fsutil membuat new.txt 0


2
The FSUTIL utility requires that you have administrative privileges.- dan tidak berlaku seperti touchfile yang ada.
Keith Thompson

1

Lima alternatif yang disebutkan di atas, ditambah tiga lagi yang tidak disebutkan di sini, dapat ditemukan di SuperUser: "Windows Recursive Touch Command"


2
Meskipun tautan ini dapat menjawab pertanyaan, lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini dan memberikan tautan untuk referensi. Jawaban hanya tautan dapat menjadi tidak valid jika halaman tertaut berubah.
Yan Sklyarenko


1

Nah, jika Anda benar - benar ingin memiliki touchperintah yang tersedia, Anda dapat meletakkan ini dalam file batch yang disebut touch.batdan memasukkannya ke C:\Windows:

TYPE NUL >>%1

Cukup sederhana.


Metode ini TIDAK memperbarui Waktu yang Dimodifikasi pada platform berikut: Windows Server 2012 R2, Windows Server 2016, Windows 10
Nate

0

Orang-orang Unix memperbaiki masalah umum memperbarui tanggal file dari file apa pun dengan perintah sentuh . Namun, untuk Windows, terkadang metode yang lebih sederhana mungkin untuk kasus khusus.

Saya perlu memperbarui stempel waktu dari pintasan aplikasi di Windows 8.1 untuk membuat perubahan pada warna latar belakang Tile Aplikasi terlihat, lihat pertanyaan SO ini . Daripada menerapkan salah satu alat pintar di atas, saya merasa lebih mudah untuk mengedit bidang komentar dari pintasan. Sebagian besar orang membiarkan ini kosong, tetapi tentu saja, komentar yang berguna dengan cepat dikandung. Dan jika ada komentar, menambah atau menghapus periode terakhir tidak akan membahayakan.


0

Saya menghargai ini adalah pertanyaan lama, saya baru saja menemukan sentuhan pada sistem Windows 10 saya. Saya mengunduh dan menginstal Git dari sini (saya pikir) dan sepertinya sentuh dan berbagai utilitas lain ada di folder bin.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.