Это расширение ответа афлат.
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