it-swarm.asia

Linux komutunun Windows eşdeğeri 'dokunma'?

Windows'ta bir dosyanın tarihini değiştiren alanını güncellemek istediğinizde ne kullanıyorsunuz?

  1. komutları erişilebilir C++, .NET, C # veya Windows’a özgü bir şey (Vista, tercihen)
  2. araçlar/uygulamalar tercihen serbest ve mümkünse açık kaynaklı

Düzenleme: CheapScotsman tarafından gösterilen uygulamalar için zaten bir sayfa var here .

Kimse bunu C++, C #, WSH veya benzer, iyi ve iyi bir şeyle nasıl yapabileceğimi bilirse, başka her şeyin bağlantılı soruda ele alındığını düşünürdüm.

167
facepalmd

Pencereleri kullanarak bir dosyanın tarih damgasına dokunmak istiyorsanız, İstemi komutunda aşağıdaki komutu kullanın:

copy /b filename.ext +,,

(filename.ext dosyanızın adıdır). +,,, copy öğesine basitçe - dosyadaki tarih/saati güncelle için özel bir bayraktır: -

* Bir dosyanın saatini ve tarihini değiştirme

Geçerli saati ve tarihi, dosyayı değiştirmeden bir dosyaya atamak istiyorsanız, aşağıdaki sözdizimini kullanın:

copy /b Source+,,

Virgüller, Hedef parametresinin atlandığını gösterir.

Lumi ve Justin'in yorumlarına göre düzenle: bunu bir toplu iş dosyasına koyar, örneğin. dokunma.cmd

@COPY /B %1+,, %1

Bu, dosya geçerli dizinde olmasa bile çalışır (Windows 7'de test edilmiştir).

348
Gish Domains

Çok sayıda ortak Unix yardımcı programının yerel Win32 bağlantı noktaları olan unxutils kullandım ve önerdim. Orada bir touch komutu var.

160
Greg Hewgill

İstediğiniz tek şey dosyanın son değiştirilme tarihini değiştirmekse (ki bu benim durumum):

C:\> powershell  (ls your-file-name-here).LastWriteTime = Get-Date
95
ThiagoAlves
type nul >>file & copy file +,,
  • Var değilse file oluşturur.
  • Dosya içeriğini yalnız bırakır.
  • Sadece cmd dahili kullanır.
  • Her ikisi de son erişim ve oluşturma kez güncellendi.

GÜNCELLEME

Gah! Bu, salt okunur dosyalar üzerinde çalışmaz, oysa touch işlevi çalışır. Öneririm:

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

@ Çizgi-tom-patlama:

İşte Technet'in gizemli '+' ve virgüllerin açıklaması:

kopyala/b Kaynak + ,

Virgüller, Hedef parametresinin atlandığını gösterir.

Copy komutu, birden fazla dosyayı tek bir hedef dosyaya birleştirmeyi destekler. Boş bir hedef, Komut İsteminde bir boşluk karakteri kullanılarak belirtilemediğinden, bunu belirtmek için iki virgül kullanılabilir.

Ve bu Technet'in kopya komutu referansı: http://technet.Microsoft.com/en-us/library/bb490886.aspx

32
Faredoon

Kendiniz kodlamak istiyorsanız, .NET, File.SetLastAccessTime , File.SetCreationTime ve File.SetLastWriteTime yöntemlerini sunar.

23
Fredrik Mörk

burada powershell kullanarak özyinelemeli bir sürüm ... bu, tüm dosya ve alt dizinlerin ve bu dizinin alt dizinlerindeki dosyaların son değiştirilme zamanını değiştirecek

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

GnuWin32 project, Unix komut satırı yardımcı programlarının Gnu sürümlerinin Windows bağlantı noktalarına sahiptir.

Bir dizi ayrı paket olarak gelir ve ihtiyaç duyduğunuz komutları başka hiçbir bağımlılık olmadan kurabilirsiniz. touch için CoreUtils package'a ihtiyacınız olacak.

15
Dave Webb

Bunu toplu komut dosyasımda boş bir dosya oluşturmak için denedim. Bunu kullanabilirsiniz:

ECHO text>file1.txt
15
pkm

cygwin , touch ile birlikte gelir. Bütün bir çerçeveyi kurmak istemediğinizi belirttiğinizi biliyorum, ancak cygwin oldukça hafiftir ve unix benzeri komut satırının tamamı açılmadan dos komut penceresinden çağrılabilir.

Hangi araçların yükleneceğini de denetleyebilirsiniz, böylece touch.exe dosyasını yükleyebilir ve çerçevenin geri kalanını bırakabilirsiniz.

14
serg10

İşte yazdığım basit bir dosya Windows Gezgini'nde "dokun" u sağ tıklayın . Sadece çağırdığından beri senaryo yazması kolay olurdu:

cmd.exe /c copy %1+nul %1 /by
14
Jon Galloway

Dokunma dahil birçok unix komutunun yerel win32 bağlantı noktası .

Daha önce kullandım ve iyi çalışıyor - kurulum yok, DLL yok, vb.

12
Adam Davis

Bunu CodeProject den deneyin.

  • Yüklemeye gerek yok.
  • İsterseniz, kaynağı bile değiştirebilirsiniz.
11
Prakash

Ayrıca Cygwin 'i de yükleyebilirsin, bu da sana Touch'ın yanı sıra diğer * NIX komutlarının bir çokluğunu da verir.

9
jamesaharvey

Bir benzer bir sorudan Yığın Taşması ile ilgili.

Zaman damgalarını güncellemek için (touch işlevinin diğer işlevlerini yok sayarak), şöyle giderdim:

copy /b filename.ext +,,
5
Dennis Williamson

Birçok Unix yardımcı programının Windows bağlantı noktaları var. unxutils veya GnuWin32 projects ifadesine göz atın.

5
VladV

web sitesinden:

Funduc Software Touch , bir veya daha fazla dosyadaki zaman/tarih ve/veya nitelik damgalarını değiştirmenize izin veren ücretsiz bir 'dokunma' yardımcı programıdır. Ayrıca, FS Dokunma mevcut dosya süresinden belirli bir saniye sayısını ekleyebilir/çıkarabilir. 'Karmaşık dosya maskeleri' ile hangi dosya (ların) ve/veya alt dizinlerin değiştirileceğini belirleyebilirsiniz. Program etkileşimli veya komut satırından çalıştırılabilir. 7.2 sürümünde yeni bir dosya değiştirme zaman damgasını +/- belirtilen saniye sayısını değiştirmek için bir komut satırı anahtarıdır.

FS Touch, Windows XP, Vista, Windows 7 ve Windows 8'de çalışır.

4
Marek

Bu içerik bir reg dosyasına kaydedilebilir. Bu, "Dokunmatik Dosya" özelliğine sahip tüm dosyalar için bir sağ tıklama bağlam menüsü ekler (Windows 7'de test edilmiştir). all aşağıdaki satırları reg dosyasına kopyalayın. Dosyayı çalıştırın ve soruyu onaylayın. Herhangi bir dosyaya (veya birden fazla dosyaya) sağ tıklayın - "Dosyaya Dokun" seçeneği artık kullanılabilir.

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

Kod bileşeni "Windows için Dokun" konusuna ne dersiniz: http://www.codeproject.com/KB/applications/touch_win.aspx

düzenle; Burada olduğu gibi aynı soru: https://stackoverflow.com/questions/51435/windows-version-of-the-unix-touch-command/51439

4
CheapScotsman

Git'i bir veya daha fazla proje için kullanıyorsanız, Windows için mingw tabanlı git-bashtouch komutuna sahiptir. Greg-hewgill'e bana 'nix araçlarının pencereler için mevcut olduğunu, çünkü git-bash'ta dokunmayı denemek fikrini ortaya koyduğu için bana teşekkür etmek istiyorum.

3
Superole

powerShell'de şunu deneyin:

ni fileName.txt

NI, New-Item cmdlet'in diğer adıdır.

3
Monfa.red

Eğer vim yüklüyse bunu yapmak için hızlı bir yol buldum (büyük dosyalar için harika değil, tüm dosyayı açıp kapatın ...)

vim foobar.txt +wq!

"+", Aşağıdaki komutları çalıştırmak için argümanı ayarlar. "WQ!" "yazma, bırakma, zorlama" dır. Bu, dosyayı açacak, bir tasarruf yapacak ve ardından hemen sonra kapanacaktır.

2
Jason

Aşağıdakileri% windir%\system32 klasörünüze touch.bat olarak kaydedin veya PATH ortam değişkeninize kaydedildiği klasörü ekleyin:

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

Örnek kullanım:

touch *.cpp
touch somefile.c

Referans: Microsoft KB 69581

2
Tim Partridge

Dosya tarihlerini başka bir dosyadan yerel olarak klonlama/çoğaltma özelliğinin 'dokunma' özelliğini ve bir toplu iş dosyasından kullanılabilir olmasını istedim.

Böylece video dosyasını toplu dosyaya 'sürükle ve bırak', FFMPEG çalışır, sonra girdi dosyasından 'Oluşturma Tarihi' ve 'Tarih Değiştirme Tarihi' çıktı dosyasına kopyalanır.

Toplu iş dosyalarının unicode dosya adlarını kullanmada korkunç olduklarını, satır içi PowerShell'in dosya adı sembollerini bozduğunu ve bunlardan iki kez kaçan bir kabus olduğunu görünene kadar bu basit görünüyordu.

Benim çözümüm 'dokunma' kısmını 'CLONE-FILE-DATE.ps1' olarak adlandırdığım ayrı bir PowerShell betiği haline getirmekti ve içerdiği:

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

Öyleyse, 'CONVERT.BAT' toplu iş dosyasındaki örnek kullanım şöyle:

%~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'in okunabilir olduğunu düşünüyorum, bu yüzden sadece toplu konuşmayı açıklayacağım:

% ~ dp0 , toplu iş dosyasının geçerli dizinidir.

% ~ 1 , kümeye tırnak işaretleri olmadan bırakılan dosyanın yoludur.

CHCP 65001> nul karakterleri UTF-8 olarak ayarlar ve çıktıyı yutar.

-ExecutionPolicy ByPass , insanların yanlışlıkla komut dosyalarını çalıştırmalarını önlemek için var olan global politikayı değiştirmeye gerek kalmadan PowerShell'i çalıştırmanıza olanak tanır.

1
WhoIsRich

Deneyin

fsutil dosyası createnew new.txt 0

1
Peter Hacke

Yukarıda belirtilen beş alternatif ve burada belirtilmeyen üç tane daha SuperUser'da bulunabilir: "Windows Özyinelemeli Dokunmatik Komut"

1
JdeBP

Bu, asıl soru ile biraz ilişkili değil, ancak bunu GUI nedeniyle Windows'ta çok yararlı buluyorum.

BirGUI(Explorer Kabuğu içine oluşturur) sağlayan TouchPro yardımcı programını kullanıyorum:

http://www.jddesign.co.uk/products/touchpro/touchpro.htm

1
rustyx

Eh, eğer really eğer touch komutunu kullanmak istiyorsanız, bunu touch.bat adlı bir toplu iş dosyasına koyabilir ve C:\Windows içine yapıştırabilirsiniz:

TYPE NUL >>%1

Yeterince basit.

1
MD XF

Unix çalışanları, herhangi bir dosyanın dosya tarihini touch command ile güncelleme sorununu çözdü. Ancak, Windows için, bazen özel durumlar için daha basit bir yöntem mümkündür.

Uygulama Döşemesinin arka plan renginde değişiklik yapmak için Windows 8.1'deki bir uygulama kısayolunun zaman damgasını güncellemem gerekiyor, bkz. this SO question . Yukarıdaki akıllı araçlardan birini uygulamak yerine, kısayolun yorum alanını düzenlemeyi daha kolay buluyorum. Çoğu insan bunu boş bırakır, ancak elbette, yararlı bir yorum çabucak anlaşılır. Bir yorum varsa, son bir dönemin eklenmesi veya çıkarılması hiçbir zaman zarar vermez.

0
Roland

Bunun eski bir soru olduğunu takdir ediyorum, Windows 10 sistemime dokunduğumu yeni keşfettim. Git'i here (bence) 'dan yükleyip kurdum ve dokunuşa benziyorum ve diğer çeşitli yardımcı programlar bin klasöründe.

0
0909EM

Buna ve başka bir çok şeye ihtiyacım olduğu için, bunu yapan kendi Shell eklentisini yarattım: AllSorts Bunu da açık kaynaklı buldum here

0
Stijn Sanders