Что вы используете, когда хотите обновить поле с измененной датой файла в Windows?
Команды, доступные через C ++, .NET, C # или что-то родное для Windows (предпочтительно Vista)
инструменты / приложения желательно бесплатные, а также по возможности с открытым исходным кодом
Изменить: здесь уже есть страница для приложений, как указано CheapScotsman здесь .
Если кто-нибудь знает, как я могу сделать это через C ++, C #, WSH или что-то подобное, ну и хорошо, иначе я бы подумал, что все остальное рассматривается в связанном вопросе.
http://stackoverflow.com/questions/210201/how-to-create-empty-text-file-from-a-batch-file упоминает загрузку, включая `REM.> a`
barlop 9 лет назад
0
Четыре упомянутых выше варианта плюс еще четыре, не упомянутые здесь, можно найти в ответе на аналогичный вопрос: [«Windows Recursive Touch Command»] (http://superuser.com/questions/251470/windows-recursive-touch -команда / 251507 # 251507 «Рекурсивная сенсорная команда Windows»)
JdeBP 13 лет назад
0
Если вы хотите прикоснуться к отметке даты файла в Windows, используйте следующую команду в командной строке:
copy /b filename.ext +,,
(где имя filename.extвашего файла). Это +,,специальный флаг, copyуказывающий ему просто обновить дату / время в файле :
* Изменение времени и даты файла
Если вы хотите назначить текущее время и дату файлу без изменения файла, используйте следующий синтаксис:
copy /b Source+,,
Запятые указывают на пропуск параметра Destination.
Редактирование на основе комментариев Луми и Джастина: поместите это в пакетный файл, например. touch.cmd
@COPY /B %1+,, %1
Это работает, даже если файл не находится в текущем каталоге (протестировано в Windows 7).
Это будет медленно, если файлы большие.
mob 15 лет назад
4
Что это делает? Где это задокументировано? (Google не может индексировать «+ ,,», и сайт MS не ведет меня в правильном направлении, так как поиск по «копии» приводит к большому количеству ничего полезного.) Я имею в виду, что он прекрасно работает, и я возьму это много как само собой разумеющееся, но мне любопытно.
dash-tom-bang 15 лет назад
44
Документация для `copy`: http://technet.microsoft.com/en-us/library/bb490886.aspx
Joseph Hansen 13 лет назад
17
`type touch.bat` равно` @echo off`, а следующая строка `copy / b% 1 + ,,` - поместите его в `C: \ bin` или что у вас есть для ваших собственных скриптов, и затем вы сможете использовать его как `touch myfile.txt`.
Lumi 13 лет назад
14
В Win7 это не будет работать, если вы не находитесь в папке, содержащей файл. Это создаст копию в текущем рабочем каталоге.
12 лет назад
17
@ Джейми, да, я тоже сталкиваюсь с этой проблемой.
netawater 11 лет назад
0
@mob Обратите внимание, что это не было медленно для большого файла. Я использовал его для файла размером> 1 ГБ на сетевом диске, и он сразу же вернулся (и работал).
Chadwick 11 лет назад
4
@Jamie: Не относится к Win7, относится ко всем ОС. Вы должны быть в текущем каталоге, поскольку ,, примет тот же файл без информации о пути (см. Ссылку на technet из комментария josmh)
Mat M 11 лет назад
0
@Gish Domains: вы хотели бы рекламировать свой ответ в вики сообщества? Я думаю, что это очень полезно, хотя и не помечено как ответ.
Mat M 11 лет назад
0
Я создал [GIST] (https://gist.github.com/tjbarbour/6356774), сочетающий этот ответ с [этим] (http://stackoverflow.com/questions/659647/how-to-get-folder- path-from-file-path-with-cmd) для автоматического добавления / pop назначения каталога
TJB 11 лет назад
2
Пакетные файлы @TJB могут начинаться с `@echo OFF`
drzaus 10 лет назад
1
Если вам нужно сделать это в удаленной папке (UNC-путь) - вы также должны указать место назначения для команды копирования - `copy / b Source + ,, Source` - где` Source` включает полный путь к файлу
Justin 10 лет назад
5
`+ ,,`: http://blogs.msdn.com/b/oldnewthing/archive/2013/07/10/10432879.aspx
thirtydot 10 лет назад
4
`Это будет медленно, если файлы большие. На самом деле, это не медленно, оно делает это менее чем за одну секунду, и даже не загорается индикатор HD-доступа. Очевидно, что команда `copy` в Windows имеет команду` touch`, специально закодированную в соответствии со статьей Technet. +1 Отличная находка; Я никогда не знал этого.
Synetech 9 лет назад
1
Одна маленькая крошечная проблема: он копирует все файлы; это помещает их в CWD.
Violet Giraffe 7 лет назад
0
Windows XP не любит копировать файл из-за пределов CWD. Для этого используйте `pushd"% ~ dp1% "` до CWD "touch" и `popd` после. (Если вы застряли, поддерживая одну из миллионов оставшихся машин XP ...)
Tydaeus 7 лет назад
0
160
Greg Hewgill
Я использовал и рекомендую unxutils, которые являются родными портами Win32 многих распространенных утилит Unix. Там есть touchкоманда.
Как и почти любой порт unix-to-windows, он не работает с символами Юникода в именах файлов за пределами кодировки, установленной по умолчанию для программ, не поддерживающих Юникод. Тестовое имя файла, которое запустит каждый такой инструмент: `" test тест τεστ.txt "`
RomanSt 10 лет назад
1
У gnuwin32 есть это. но на самом деле, gnuwin32 также не работает для символов Юникода.
barlop 8 лет назад
0
Обновление с 2017 года В Windows 10 мы можем использовать подсистему Linux для Windows, которая устанавливает bash. Нет необходимости в Cygwin, MinGW, Unxutils или любом другом частичном Unix для портов Windows. https://docs.microsoft.com/en-us/windows/wsl/install-win10
Davos 6 лет назад
0
92
ThiagoAlves
Если все, что вам нужно, это изменить дату последнего изменения файла (в моем случае):
PowerShell FTW. Я имею в виду, серьезно, Unix это круто, но PS круче.
matt 13 лет назад
8
Вы также можете обновить время последней записи для нескольких файлов / папок.
13 лет назад
1
Это будет работать только для одного файла. Для нескольких файлов: ls * | ForEach-Object {$ _. LastWriteTime = Get-Date}
Eli Algranti 12 лет назад
12
Если вы хотите сделать это рекурсивно, это работает довольно хорошо: gci -recu -inc "*. *" | % {$ _. LastWriteTime = Get-Date}
BrainSlugs83 11 лет назад
2
Не уверен, почему, но звездочки не отображаются в моем комментарии выше - "." должно быть двойная кавычка, звездочка, точка, звездочка, двойная кавычка (вы знаете, «звезда-точка-звезда»). В любом случае, попытался найти справку, чтобы выяснить, почему, но теперь это не редактируется. Штопать.
BrainSlugs83 11 лет назад
0
`touch` устанавливает время на конкретное или« сейчас », если оно не указано. `.LastWriteTime` - то же самое, поэтому вы можете сделать что-то вроде` .LastWriteTime = '12 / 30/99 23: 59'`. @matt: скорее всего, вы не очень знакомы с оболочкой * nix; PS, похоже, еще предстоит пройти долгий путь - например, `sed`? `Grep`? `Vi`? : p РЕДАКТИРОВАТЬ: Почему игнорируются мои Shift + Enter? Как добавить новые строки?
void 10 лет назад
1
Unix Touch отлично подходит для своей простоты.
Willmore 8 лет назад
0
52
bobbogo
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"
Жаль, что копия не может игнорировать атрибут + r, как это делает xcopy. Или жаль, что xcopy не поддерживает странный синтаксис `filename + ,,`.
Abel 12 лет назад
0
К сожалению, это не работает (по крайней мере, в Windows 7). Похоже, что интерпретатор команд не обновляет временную метку места назначения перенаправления, если файл фактически не изменен (т. Е. Нет данных для перенаправления).
Synetech 9 лет назад
0
32
Faredoon
@ Тир-том- взрывы:
Вот объяснение Technet таинственных '+' и запятых:
копия / б Источник + ,,
Запятые указывают на пропуск параметра Destination.
Команда copy поддерживает объединение нескольких файлов в один целевой файл. Поскольку пустое место назначения нельзя указать с помощью пробела в командной строке, для обозначения этого можно использовать две запятые.
Теперь это просто испортил синтаксис. Серьезно, * о чем они думали? * Также обратите внимание, что в той же документации написано «Место назначения: обязательно». Я поражен.
sth 14 лет назад
16
Похоже, что это даже не работает в Vista ... Интересно, пришли ли они в себя?
quillbreaker 14 лет назад
1
Работает в Windows 7
Imran 13 лет назад
1
Это сработало для меня даже без запятых: copy file.ext + Таким образом, документация так же далека от реального поведения, как и от любых разумных ожиданий.
Abgan 13 лет назад
5
Он работал в Windows Server 2008, но только если вы находитесь в папке, содержащей файл
FrinkTheBrave 12 лет назад
2
вот рекурсивная версия с использованием powershell ... это изменит время последнего изменения для всех файлов и подкаталогов, а также файлов в подкаталогах этого каталога
Менее многословный, но все же использующий только стандартные сокращения Powershell: `ls * -recurse | % {$ _. LastWriteTime = Get-Date} `
Jonas 7 лет назад
2
15
pkm
Я попытался это создать пустой файл в моем пакетном скрипте. Вы можете использовать это:
ECHO text>file1.txt
Это самый лучший быстрый метод BY. Мне просто нужно было создать файл .gitignore, и Windows 7 продолжает жаловаться «необходимо ввести имя файла» и т. Д. И т. Д. `Echo pie> .gitignore` сработала - спасибо!
10 лет назад
3
@ Алекс Это не связано, но эта ошибка Windows, потому что файл начинается с точки. В Windows Explorer есть странный хак, чтобы обойти это: конец файла тоже заканчивается точкой. Поэтому введите `.gitignore`, и когда вы нажмете Enter, Windows удалит завершающий период. Сумасшедший, но это работает.
Brad Cupit 9 лет назад
4
Я бы хотел, чтобы у меня было достаточно голосов, чтобы завоевать популярность крупных игроков.
Jonathan Mee 8 лет назад
1
Это не создает пустой файл, хотя файл file1.txt содержит «текст».
Joshua Meyers 7 лет назад
1
14
Dave Webb
Проект GnuWin32 имеет порты Windows версий Gnu утилит командной строки Unix.
Он поставляется в виде нескольких отдельных пакетов, и вы можете устанавливать только те команды, которые вам нужны, без каких-либо других зависимостей. Для touchвас потребуется пакет CoreUtils .