Нажмите файл, чтобы обновить дату / время файла?(Дата изменения) (WindowsXP BatchScript) - PullRequest
2 голосов
/ 22 июня 2011

Какая команда пакетного скрипта касается файла, чтобы обновить его дату и время до текущей даты и времени? (Дата изменения)

Например, Джо Блоу отправляет мне текстовый документ, который он создал несколько месяцев назад, когда он отправляет мне по электронной почте документ, я хочу отслеживать, сколько ему лет со дня его получения (а не когда он его создал) Я хочу обновить дату / время файла до текущей даты / времени.

У меня есть пакетный скрипт для автоматического отсеивания файлов, которые не были отредактированы в течение 90 дней, поэтому это неприятно, когда я получаю особенно старый файл, а затем внезапно исчезает.

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

Ответы [ 3 ]

6 голосов
/ 22 июня 2011

Я не могу взять весь кредит, но я просмотрел свой todo.txt, чтобы найти его

Microsoft "touch" это статья в КБ, как и 5 лет назад

Суть в том, что вы используете copy /b MYFILENAME +,,, где MYFILENAME - ваш файл

2 голосов
/ 25 мая 2016

Это расширение ответа афлат.

1) Служба поддержки Microsoft предоставляет пояснения и простой скрипт touch.bat.2) Мой собственный файл touch.cmd, который расширяет сценарий MS и включает в себя «touch /?»текст справки.3) Мой пользовательский midastouch.cmd, который предоставляет несколько опций, включая рекурсивные операции и операции с датами.

Как писал афлат, простой ответ:

copy /b FILENAME +,,

Как и следовало ожидать, FILENAME можетвключают относительный или абсолютный путь и символы подстановки, такие как * .txt.

1.Microsoft 1 поддержка:

Следующая команда MS-DOS обновляет метки даты и времени файла с именем «EXAMPLE» без изменения содержимого файла.Это похоже на утилиту TOUCH, которая есть в XENIX и в некоторых сторонних наборах инструментов MS-DOS.

COPY /B EXAMPLE +,,

Команда COPY может объединить файл в существующий файл при использовании в форме:

COPY FILE1+FILE2

В этом примересодержимое FILE2 добавляется к FILE1, оставляя FILE2 без изменений.При копировании в этом режиме команда COPY переключается в режим ASCII, где учитывается маркер конца файла ^ Z (0x01A).

Следовательно, с помощью приведенной выше команды / b переводит команду COPY в двоичный режим, имя файла - это файл, который нужно обновить, знак + (плюс) указывает, что файл должен быть добавлен, и,, (запятые) являются заполнителями для оставшихся параметров (которые не включены в этот пример).Поскольку добавляемый файл не указан, команда COPY ничего не добавит и обновит только метки времени и даты для файла.

Следующий автоматизированный файл TOUCH.BAT может быть использован для автоматизации процесса:

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

Для этого пакетного файла требуется один параметр:прикоснулся «.Если параметр не указан, строка 2 приведет к выходу пакетного файла без каких-либо действий.Если указанный файл не существует, строка 3 также приведет к выходу пакетного файла.

2.Touch.cmd

@echo off
:: -----------------------------------------
:: Process input parameter
:: -----------------------------------------

: Help requestes?
if "%1%"=="/?" goto help
if "%1%"=="?" goto help
if "%1%"=="" goto help

:: -----------------------------------------
:: Update Modified Date property to now
:: -----------------------------------------
if not exist %1% goto end    
copy /b %1% +,, > nul    
echo %1 touched!    
goto end

:help

@echo off
echo :: --------------------------------------------------------------
echo :: Touch.cmd Help
echo :: --------------------------------------------------------------
echo.
echo Touch.cmd is batch script to update the Modified Date property 
echo of teh specified file to the current
echo date and time.  
echo.
echo Syntax: touch filename
echo         where,
echo         filename is the name of the name of the file to "touch."
echo         filename may include a relative o full path.
echo         filename may include wild cards like *.txt.
echo.

:end

3.MidasTouch.cmd

@echo off
:: -----------------------------------------
:: Find files older than specified date
:: -----------------------------------------

:: -----------------------------------------
:: Default Values
:: -----------------------------------------
set "default_path=%cd%"
set "default_err_log=%cd%\midastouch_err.log"
set /a default_date=-365
set "open_log=False"
set "recurse=True"

:: -----------------------------------------
:: Process input parameters 
:: -----------------------------------------

: Help requestes?
if "%1%"=="/?" goto help
if "%1%"=="?" goto help
if /I "%1%"=="help" goto help

set "dir_in="
set "err_log="
set "dd="

:: Read in commandline arguements.
echo Arguements:
:arguement_loop
    if "%1%"=="/p" (
        echo     Path: %2%
        set dir_in=%2%
        shift
        goto loop_bottom)
    if "%1%"=="/l" (
        echo     Error log: %2%
        set err_log=%2%
        shift
        goto loop_bottom)    
    if "%1%"=="/-l" (
        echo     No error log.  Output to console.
        set err_log=CON
        shift
        goto loop_bottom)    
    if "%1%"=="/d" (
        echo     Date: %2%
        set /a dd=%2% 
        shift
        goto loop_bottom)
    if "%1%"=="/o" (
        echo     Open log: True
        set "open_log=True"
        goto loop_bottom)
    if "%1%"=="/-o" (
        echo     Open log: False
        set "open_log=False"
        goto loop_bottom)
    if "%1%"=="/s" (
        echo     Recursive: True
        set "recurse=True"
        goto loop_bottom)
    if "%1%"=="/-s" (
        echo     Recursive: False
        set "recurse=False"
        goto loop_bottom)
    if not "%1%"=="" (
        if "%dir_in%"=="" (
            echo     Path: %1%
            set dir_in=%1%
            goto loop_bottom)
        if "%err_log%"=="" (
            echo     Error log: %1%
            set err_log=%1%
            goto loop_bottom)
        if "%dd%"=="" (
            echo     Date: %1%
            set /a dd=%1%
            goto loop_bottom)
    )
:loop_bottom
shift
if not "%1%"=="" goto arguement_loop

if "%dir_in%"=="" ( 
    set dir_in=%default_path%)
if "%err_log%"=="" ( 
    set err_log=%default_err_log%)
if "%dd%"=="" ( 
    set /a dd=%default_date%)

:: -----------------------------------------
:: Execution
:: -----------------------------------------

:: Write header
set "header=Touch_dir.cmd Error Log"
if exist %err_log% (
    del /q %err_log%)
@echo %header% >%err_log%

set cmd_str="cmd /c copy /b @path +,,"

:: Update Modified Date property to now
if /I "%recurse%"=="True" (
    set cmd_str=forfiles /s /p %dir_in% /d %dd% /c %cmd_str%
) else (
    set cmd_str=forfiles /p %dir_in% /d %dd% /c %cmd_str%
)
echo Command: %cmd_str% >>%err_log%
echo Errors: >>%err_log%
echo. >>%err_log%
echo Executing command: %cmd_str%
@echo Updating Modified Date of files older than date: %dd%.
@echo This may take a while.  Please be patient...
@echo.
echo.
set cmd_str=%cmd_str% || @echo Failed to update: @path >>%err_log%"
%cmd_str%

:: Results
@echo Error log: %err_log% 
if "%open_log%"=="True" (start %err_log%)

goto end

:help
@echo off
echo :: --------------------------------------------------------------
echo :: Touch_dir.cmd Help
echo :: --------------------------------------------------------------
echo.
echo Touch.cmd is batch script to recursively "touch" all files in a
echo folder to update their Modified Date property to the current
echo date and time.  
echo.
echo Syntax: touch_dir /d directory /l err_log /m months
echo         where,
echo         /p  path       Path containing files with Modified
echo                        Date values to update to now.
echo                        (default = current directory).
echo         /s  (or /-s)   Recursive (or not recursive) search 
echo                        (default recursive is %recurse%).
echo         /l  err_log    Error log: list of files not updated
echo                        (default err_log: midastouch_err.log).
echo         /o  (or /-o)   Open (or do not open) error log after 
echo                        execution (default open_log: %open_log%).
echo         /d  date       Selects files with a last modified date greater
echo                        than or equal to (+), or less than or equal to
echo                        (-), the specified date using the
echo                        "MM/dd/yyyy" format; or selects files with a
echo                        last modified date greater than or equal to (+)
echo                        the current date plus "dd" days, or less than or
echo                        equal to (-) the current date minus "dd" days. A
echo                        valid "dd" number of days can be any number in
echo                        the range of 0 - 32768.
echo                        "+" is taken as default sign if not specified.
echo                        (default date is: %default_date%).
echo.

:end
0 голосов
/ 17 сентября 2015

Просто чтобы добавить, что этот же источник предоставляет пакетный скрипт.

@echo off
goto start

:usage
echo usage: TOUCH.BAT "MYFILENAME"
exit /b 0

:start
if %1.==. goto usage
if not exist %1 goto usage
copy /b %1 +,, > nul
echo %1 touched!
exit /b 0
...