it-swarm.xyz

Windows-эквивалент команды Linux "touch"?

Что вы используете, когда хотите обновить поле с измененной датой файла в Windows?

  1. команды доступны через C++, .NET, C # или что-то родное для Windows (предпочтительно Vista)
  2. инструменты/приложения желательно бесплатно, а также по возможности с открытым исходным кодом

Правка: уже есть страница для приложений, как указано CheapScotsman здесь .

Если кто-нибудь знает, как я могу сделать это через C++, C #, WSH или что-то подобное, ну и хорошо, иначе я бы подумал, что все остальное рассматривается в связанном вопросе.

167
facepalmd

Если вы хотите прикоснуться к отметке даты файла с помощью Windows, используйте следующую команду в командной строке:

copy /b filename.ext +,,

(где filename.ext - имя вашего файла). +,, - это специальный флаг для copy, указывающий ему просто обновить дату/время в файле :

* Изменение времени и даты файла

Если вы хотите назначить текущее время и дату файлу без изменения файла, используйте следующий синтаксис:

copy /b Source+,,

Запятые указывают на пропуск параметра Destination.

Редактировать на основе комментариев Луми и Джастина: поместить это в командный файл, например. touch.cmd

@COPY /B %1+,, %1

Это работает, даже если файл не находится в текущем каталоге (протестировано в Windows 7).

348
Gish Domains

Я использовал и рекомендую unxutils , которые являются родными портами Win32 многих распространенных утилит Unix. Там есть команда touch.

160
Greg Hewgill

Если все, что вам нужно, это изменить дату последнего изменения файла (в моем случае):

C:\> powershell  (ls your-file-name-here).LastWriteTime = Get-Date
95
ThiagoAlves
type nul >>file & copy file +,,
  • Создает file, если он не существует.
  • Оставляет содержимое файла в покое.
  • Просто использует встроенные cmd.
  • Оба последний доступ и создание время обновлено.

ОБНОВЛЕНИЕ

Г! Это не работает для файлов только для чтения, тогда как touch работает. Я предлагаю:

: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

@ Тир-том- взрывы:

Вот объяснение Technet таинственных '+' и запятых:

копия/б Источник + ,

Запятые указывают на пропуск параметра Destination.

Команда copy поддерживает объединение нескольких файлов в один целевой файл. Поскольку пустое место назначения нельзя указать с помощью пробела в командной строке, для обозначения этого можно использовать две запятые.

И это ссылка на команду копирования Technet: http://technet.Microsoft.com/en-us/library/bb490886.aspx

32
Faredoon

Если вы хотите написать код самостоятельно, .NET предлагает методы File.SetLastAccessTime , File.SetCreationTime и File.SetLastWriteTime .

23
Fredrik Mörk

вот рекурсивная версия с использованием powershell ... это изменит время последнего изменения для всех файлов и подкаталогов, а также файлов в подкаталогах этого каталога

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

Проект GnuWin32 имеет порты Windows версий Gnu утилит командной строки Unix.

Он поставляется в виде нескольких отдельных пакетов, и вы можете устанавливать только те команды, которые вам нужны, без каких-либо других зависимостей. Для touch вам потребуется пакет CoreUtils .

15
Dave Webb

Я попытался это создать пустой файл в моем пакетном скрипте. Вы можете использовать это:

ECHO text>file1.txt
15
pkm

cygwin поставляется с touch. Я знаю, что вы упомянули, что вы не хотите устанавливать весь фреймворк, но Cygwin довольно легок и может вызываться из окна командной строки DOS без включенной всей командной строки, подобной Unix.

Вы также можете контролировать, какие инструменты устанавливать, чтобы вы могли просто установить файл touch.exe и оставить остальную часть фреймворка.

14
serg10

Вот простой regfile, который я написал для добавьте правый клик "touch" в Windows Explorer . Также было бы легко написать скрипт, так как он просто вызывает:

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

Родные порты win32 для многих команд unix , включая touch.

Я использовал его раньше, и он работает хорошо - без установки, без DLL и т.д.

12
Adam Davis

Попробуйте это из CodeProject .

  • Не нужно устанавливать.
  • Если вы хотите, вы можете даже изменить источник.
11
Prakash

Вы также можете установить Cygwin , который дает вам Touch, а также множество других команд * NIX.

9
jamesaharvey

Из аналогичного вопроса по переполнению стека.

Для обновления меток времени (игнорируя другие функции touch), я бы пошел с:

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

Есть порты Windows многих утилит Unix. Посмотрите unxutils или GnuWin32 projects.

5
VladV

с веб-сайта:

Funduc Software Touch - это бесплатная «сенсорная» утилита, которая позволяет изменять метки времени/даты и/или атрибутов для одного или нескольких файлов. Кроме того, FS Touch может добавлять/вычитать указанное количество секунд из существующего времени файла. Вы можете указать, какие файлы и/или подкаталоги следует изменить с помощью «сложных файловых масок». Программа может быть запущена из интерактивного или командной строки. Новое в версии 7.2 - переключатель командной строки для изменения метки времени изменения файла +/- указанное количество секунд.

FS Touch работает на Windows XP, Vista, Windows 7 и Windows 8.

4
Marek

Этот контент может быть сохранен в reg-файл. Это добавит контекстное меню правой кнопки мыши для всех файлов с возможностью «Touch File» (протестировано в Windows 7). Скопируйте все следующие строки в файл reg. Запустите файл и подтвердите вопрос. Щелкните правой кнопкой мыши по любому файлу (или нескольким файлам) - теперь доступна опция «Touch File».

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

Как насчет кода проекта «Touch для Windows»: http://www.codeproject.com/KB/applications/touch_win.aspx

редактировать; Тот же вопрос, что и здесь: https://stackoverflow.com/questions/51435/windows-version-of-the-unix-touch-command/51439

4
CheapScotsman

Если вы используете git для одного или нескольких проектов, git-bash для Windows на основе mingw имеет команду touch. Я хочу поблагодарить @ greg-hewgill за указание на то, что утилиты 'nix существуют для windows, потому что именно это натолкнуло меня на мысль попробовать touch в git-bash.

3
Superole

в PowerShell попробуйте:

ni fileName.txt

NI является псевдонимом New-Item командлета.

3
Monfa.red

Я нашел быстрый способ сделать это, если у вас установлен vim (не подходит для больших файлов, откроет весь файл, затем закроет его ...)

vim foobar.txt +wq!

«+» Устанавливает аргумент для запуска следующих команд. "WQ!" это «написать, выйти, заставить». Это откроет файл, сохранит и закроет его сразу после этого.

2
Jason

Сохраните следующий файл как touch.bat в папке% windir%\system32 или добавьте папку, в которой он сохраняется, в переменную среды 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

2
Tim Partridge

Я хотел, чтобы «сенсорная» функция клонирования/дублирования файлов датировалась из другого файла, изначально, и была пригодна для использования из пакетного файла.

Таким образом, «перетащите» видеофайл в пакетный файл, FFMPEG запускается, затем «Дата создания» и «Дата изменения» из входного файла копируются в выходной файл.

Сначала это казалось простым, пока вы не обнаружили, что пакетные файлы ужасны при обработке имен файлов в Юникоде, встроенный PowerShell портится с символами имен файлов, и двойное экранирование - это кошмар.

Моим решением было сделать «сенсорную» часть отдельным скриптом PowerShell, который я назвал «CLONE-FILE-DATE.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
WhoIsRich

Пытаться

fsutil файл createnew new.txt 0

1
Peter Hacke

Пять вариантов, упомянутых выше, плюс еще три, не упомянутые здесь, можно найти в SuperUser: «Windows Recursive Touch Command»

1
JdeBP

Это немного не связано с первоначальным вопросом, но я считаю, что это очень полезно для Windows из-за графического интерфейса.

Я использую утилиту TouchPro, которая предоставляетGUI(встроено в оболочку Explorer):

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

1
rustyx

Что ж, если вы действительно хотите иметь команду touch, вы можете поместить ее в пакетный файл с именем touch.bat и вставить в C:\Windows:

TYPE NUL >>%1

Достаточно просто.

1
MD XF

Люди из Unix исправили общую проблему обновления даты любого файла с помощью команды touch . Однако для Windows иногда более простой способ возможен в особых случаях.

Мне нужно обновить временную метку ярлыка приложения в Windows 8.1, чтобы сделать видимыми изменения в цвете фона плитки приложения, см. этот SO вопрос . Вместо того, чтобы реализовывать один из умных инструментов, описанных выше, мне легче редактировать поле комментариев ярлыка. Большинство людей оставляют это пустым, но, конечно, полезный комментарий быстро придумывается. И если комментарий существует, добавление или удаление последнего периода никогда не повредит.

0
Roland

Я ценю, что это старый вопрос, я только что обнаружил прикосновение к моей системе Windows 10. Я скачал и установил Git из здесь (я думаю), и похоже, что touch и различные другие утилиты находятся в папке bin.

0
0909EM