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

Windowsowy odpowiednik linuksowego polecenia 'touch'?

Czego używasz, gdy chcesz zaktualizować pole danych zmodyfikowanego pliku w Windows?

  1. commands dostępne przez C++, .NET, C#, lub coś natywnego dla Windows (najlepiej Vista)
  2. narzędzia/aplikacje najlepiej za darmo, a jeśli to możliwe również open source

Edycja: jest już strona dla aplikacji, na którą wskazuje CheapScotsman tutaj .

Jeśli ktoś wie, jak mogę to zrobić przez C++, C#, WSH lub coś podobnego, dobrze i dobrze, w przeciwnym razie pomyślałbym, że wszystko inne jest objęte połączonym pytaniem.

Odpowiedzi (27)

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

Użyłem i polecam unxutils , które są natywnymi portami Win32 wielu popularnych narzędzi uniksowych. Jest tam komenda touch.

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

Jeśli chcesz tylko zmienić datę ostatniej modyfikacji pliku (co było w moim przypadku):

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 +,,
  • Tworzy file, jeśli nie istnieje.
  • Pozostawia zawartość pliku samą.
  • Po prostu używa cmd wbudowań.
  • Zarówno ostatni dostęp, jak i tworzenieczasy aktualizacji.

UPDATE

Gah! To nie działa na plikach tylko do odczytu, podczas gdy touch to robi. Sugeruję:

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

Oto wyjaśnienie Techneta tajemniczego ‘+’ i przecinki:

copy /b Source+,

Przecinki wskazują na pominięcie parametru Destination.

Polecenie copy obsługuje łączenie wielu plików w jeden plik docelowy. Ponieważ puste miejsce docelowe nie może być określone za pomocą znaku spacji w wierszu polecenia, można użyć dwóch przecinków do jego oznaczenia.

I jest to odniesienie do polecenia kopiowania Technetu: http://technet.microsoft.com/en-us/library/bb490886.aspx

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

Jeśli masz ochotę zakodować go samemu, .NET oferuje metody File.SetLastAccessTime , File.SetCreationTime i File.SetLastWriteTime .

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

oto wersja rekurencyjna wykorzystująca powershell… to zmieni ostatni zmodyfikowany czas dla wszystkich plików i podkatalogów, oraz plików w podkatalogach tego katalogu

ps c:myDir> Get-ChildItem . * -recurse | ForEach-Object{$_.LastWriteTime = get-date}
15
15
15
2008-09-09 09:17:29 +0000

cygwin pochodzi z touch. Wiem, że wspomniałeś o tym, że nie chcesz instalować całego frameworka, ale cygwin jest dość lekki i można go wywołać z okna poleceń dos bez włączonej całej uniksowej linii poleceń.

Możesz również kontrolować, jakie narzędzia zainstalować, więc możesz po prostu zainstalować plik touch.exe i pozostawić resztę frameworka.

15
15
15
2008-09-09 09:18:05 +0000

Projekt GnuWin32 posiada porty Windows wersji Gnu narzędzi z linii komend Uniksa.

Dostarczany jest jako szereg oddzielnych pakietów i możesz zainstalować tylko te komendy, których potrzebujesz, bez żadnych innych zależności. Dla touch potrzebny jest pakiet CoreUtils .

15
15
15
2013-07-10 11:52:23 +0000

Próbowałem tego, aby stworzyć pusty plik w moim skrypcie wsadowym. Możesz użyć tego:

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

Oto prosty plik regfile, który napisałem do dodaj prawym przyciskiem myszy “touch” w Eksploratorze Windows . To też byłoby łatwe do skryptowania, bo to po prostu wywołuje:

cmd.exe /c copy %1+nul %1 /by
13
13
13
2008-09-09 09:13:36 +0000

Native win32 ports of many unix commands , including touch.

I’ve used it before and it works well - no installation, no DLLs, etc.

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

Wypróbuj ten z CodeProject .

  • Nie ma potrzeby instalacji.
  • Jeśli chcesz, możesz nawet zmodyfikować źródło.
9
9
9
2009-07-21 21:49:43 +0000

Można również zainstalować Cygwin , który daje Ci Touch, jak również wiele innych komend *NIX.

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

Istnieją porty Windows wielu narzędzi uniksowych. Spójrz na projekty unxutils lub GnuWin32 .

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

Z podobne pytanie na Stack Overflow.

Do aktualizacji znaczników czasowych (ignorując inną funkcjonalność touch), poszedłbym z:

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

Co powiesz na projekt kodowy “Touch for Windows”: http://www.codeproject.com/KB/applications/touch_win.aspx

edit; To samo pytanie jak tutaj: https://stackoverflow.com/questions/51435/windows-version-of-the-unix-touch-command/51439

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

Jeśli używasz gita do jednego lub więcej projektów, to oparte na mingw git-bash dla Windows ma polecenie touch. Chcę podziękować @greg-hewgill za wskazanie mi, że ‘nix utilities istnieją dla Windows, ponieważ to właśnie to sprawiło, że wpadłem na pomysł, aby spróbować dotknąć w git-bash.

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

w PowerShell spróbuj:

ni fileName.txt

NI to alias New-Item cmdlet.

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

Znalazłem szybki sposób, aby to zrobić, jeśli masz zainstalowanego vima (nie świetne dla dużych plików, otworzy cały plik, a następnie go zamknąć…)

vim foobar.txt +wq!

Argument “+” ustawia się tak, aby uruchomić następujące polecenia. “wq!” to “write, quit, force”. Spowoduje to otwarcie pliku, zapisanie go, a następnie natychmiastowe zamknięcie.

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

Zapisz następujące dane jako touch.bat w folderze %windir%\system32 lub dodaj folder, w którym są one zapisane do zmiennej środowiskowej PATH:

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

Przykładowe użycie:

touch *.cpp
touch somefile.c

Referencje: Microsoft KB 69581

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

Chciałem ‘dotykową’ funkcję klonowania / duplikowania daty pliku z innego pliku, natywnie, i być używany z pliku wsadowego.

Więc ‘przeciągnij i upuść’ plik wideo na plik wsadowy, FFMPEG działa, a następnie ‘Data utworzony’ i ‘Data zmodyfikowana’ z pliku wejściowego jest kopiowany do pliku wyjściowego.

Na początku wydawało się to proste, aż do momentu, gdy okazało się, że pliki wsadowe są okropne w obsłudze nazw plików unicode, w linii PowerShell miesza się z symbolami nazw plików, a podwójne ich wymykanie się jest koszmarem.

Moim rozwiązaniem było uczynienie części ‘touch’ osobnym skryptem PowerShella, który nazwałem ‘CLONE-FILE-DATE’. ps1" i zawiera:

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

Wtedy oto przykład użycia w moim pliku wsadowym ‘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"

Myślę, że PowerShell jest czytelny, więc wytłumaczę tylko, że wsadowy plik mówi:

%~dp0 jest aktualnym katalogiem wsadowym.

%~1 to ścieżka do pliku zrzuconego na wsad bez cudzysłowów.

CHCP 65001 > nul ustawia znaki na UTF-8 i połyka wyjście.

-ExecutionPolicy ByPass pozwala uruchomić PowerShella bez potrzeby modyfikacji globalnej polityki, która jest tam, aby zapobiec przypadkowemu uruchamianiu skryptów.

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

Jest to nieco niezwiązane z pierwotnym pytaniem, ale uważam, że jest to bardzo użyteczne w Windows ze względu na GUI.

Używam narzędzia TouchPro, które zapewnia GUI (wbudowany w powłokę eksploratora): http://www.jddesign.co.uk/products/touchpro/touchpro.htm

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

Cóż, jeśli really chcesz mieć dostępną komendę touch, możesz umieścić ją w pliku wsadowym o nazwie touch.bat i umieścić ją w C:\Windows:

TYPE NUL >>%1

Wystarczająco proste.

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

Pięć alternatyw wymienionych powyżej oraz trzy inne, nie wymienione tutaj, można znaleźć na stronie SuperUser: “Windows Recursive Touch Command”

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

Ponieważ ja też tego potrzebowałem i wielu innych rzeczy, stworzyłem własne rozszerzenie powłoki, które to robi: AllSorts I’ve also open-sourced this here

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

Uniksowcy rozwiązali ogólny problem aktualizacji daty dowolnego pliku za pomocą polecenia touch. Jednak dla Windows, czasami w szczególnych przypadkach możliwa jest prostsza metoda.

Muszę zaktualizować znacznik czasu skrótu aplikacji w Windows 8.1 w celu dokonania zmian w kolorze tła widocznego Kafelka aplikacji, patrz to pytanie SO . Zamiast implementować jedno z powyższych sprytnych narzędzi, uważam, że łatwiej jest mi edytować pole komentarza skrótu. Większość ludzi pozostawia to puste, ale oczywiście użyteczny komentarz jest szybko tworzony. A jeśli jakiś komentarz istnieje, dodawanie lub usuwanie końcowej kropki nigdy nie szkodzi.

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

Doceniam to stare pytanie, właśnie odkryłem dotyk na moim systemie Windows 10. Pobrałem i zainstalowałem Gita z tutaj (myślę, że) i wygląda na to, że dotyk i różne inne narzędzia znajdują się w folderze bin.