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

Эквивалент для Windows команды 'touch'?

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

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

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

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

Ответы (27)

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

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

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

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

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 +,,
  • Создает file, если его не существует.
  • Оставляет содержимое файла в покое.
  • Использует только cmd встроенных файлов.
  • Обновляется last-access и creation раз.

UPDATE

Gah! Это не работает с файлами только для чтения, в то время как 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"
33
33
33
2009-11-25 10:51:32 +0000

@dash-tom-bang:

Вот объяснение Technet таинственного ‘+’ и запятые:

копирование /b Source+,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Вот простой регфайл, который я написал в добавить правой кнопкой мыши “touch” в проводнике Windows . Сценарий тоже легко написать, так как он просто вызывает:

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

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

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

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

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

  • Нет необходимости в установке.
  • При желании вы даже можете изменить исходные тексты.
9
9
9
2009-07-21 21:49:43 +0000

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

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

Есть порты Windows многих утилит Unix. Взгляните на проекты unxutils или GnuWin32 .

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

Из похожего вопроса на Stack Overflow.

Для обновления временных меток (без учета другой функциональности touch) я бы выбрал:

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

Как насчет кодового проекта “Touch for Windows”: _COPY19_win.aspx

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

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

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

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

в PowerShell попытка:

ni fileName.txt

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

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

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

vim foobar.txt +wq!

Аргумент “+” устанавливает аргумент для выполнения следующих команд. “wq!” это “write, quit, force”. При этом будет открыт файл, сделана запись, а затем сразу же после этого закрыт.

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

Сохраните файл 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
2
2
2018-02-18 21:50:03 +0000

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

Так что ‘перетащить’ видео файл на пакетный файл, FFMPEG запускается, а затем ‘Date Created’ и ‘Date Modified’ из входного файла получается скопировать в выходной файл.

Сначала это казалось простым, пока вы не обнаружили, что пакетные файлы ужасно работают с однокодовыми именами файлов, в строке 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
1
1
2012-10-02 14:30:49 +0000

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

я использую утилиту TouchPro, которая предоставляет GUI (встроенный в оболочку проводника): http://www.jddesign.co.uk/products/touchpro/touchpro.htm

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

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

TYPE NUL >>%1

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

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

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

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

Поскольку мне это тоже было нужно, а также ряд других вещей, я создал свое собственное расширение оболочки, которое делает это: AllSorts Я также открыл этот здесь

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

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

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

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

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