Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Команда копирования файла с указанием времени копирования (http://forum.oszone.net/showthread.php?t=188278)

Pozia 13-10-2010 21:12 1518230

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

Iska 13-10-2010 21:51 1518255

Что-то наподобие такого?
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=%~1

if not defined sSourceFile  goto :eof
if not exist "%sSourceFile%" goto :eof

set sDestPath=%~2
if not defined sDestPath    goto :eof
if not exist "%sDestPath%\." goto :eof

for /f "tokens=1-3 delims=. " %%i in  ('date /t') do set sDate=%%k%%j%%i
for /f "tokens=1-3 delims=: " %%i in  ('time /t') do set sTime=%%k%%j%%i

copy "%sSourceFile%" "%sDestPath%\%~n1_%sDate%_%sTime%%~x1"

endlocal
exit /b 0

Первый параметр — исходный файл. Второй параметр — путь назначения. «date /t»/«time /t», помнится, работают, начиная с XP (???); кроме того, разбор зависит от региональных параметров (впрочем, здесь этот вопрос неоднократно разбирался — как «вытащить» эти данные из реестра и применить в разборе; кроме того, можно пользовать разбор «wmic.exe path win32_localtime get»).

Pozia 13-10-2010 22:08 1518263

Iska, много так всего мне непонятного. Можно как то проще с явным примером копирования файла 1.txt с диска с на d?

Iska 13-10-2010 22:41 1518289

Для вышеприведённого пакетного файла вызов может быть такой:
Код:

modcopy.cmd "c:\My path\1.txt" "d:\"
Если текущим каталогом при вызове пакетного файла будет каталог с файлом «1.txt» — вызов можно сократить, например, до:
Код:

modcopy.cmd 1.txt "d:\"
«…явный пример…»

Плюём на параметры и проверки, данные пишем прямо в коде:
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=c:\My path\1.txt
set sDestPath=d:\

for /f "tokens=1-3 delims=. " %%i in  ('date /t') do set sDate=%%k%%j%%i
for /f "tokens=1-3 delims=: " %%i in  ('time /t') do set sTime=%%k%%j%%i
for %%i in ("%sSourceFile%") do copy "%sSourceFile%" "%sDestPath%\%%~ni_%sDate%_%sTime%%%~xi"

endlocal
exit /b 0


Pozia 13-10-2010 22:55 1518296

Iska, а если в тот первый батник засунуть команду копирования чтобы в одном батнике делать копирование? Как? И попроще без всего лишнего

amel27 14-10-2010 01:25 1518362

Код:

copy "DIR1\file.txt" "DIR2\file_%DATE%_%TIME:~,2%%TIME:~3,2%%TIME:~6,2%.txt"
Код:

for /f "delims=+-" %%i In ('WMIC OS Get LocalDateTime^|find "."') do set DT=%%i
copy "DIR1\file.txt" "DIR2\file_%DT%.txt"

1-й вариант самый быстрый/короткий, но его реализация зависит от формата отображения даты/времени в региональных настройках, 2-й вариант свободен от привязки к локали, но WMIC работает медленно и для каждого файла его вызывать нежелательно

Iska 16-10-2010 04:27 1519910

Цитата:

Цитата amel27
…WMIC OS Get LocalDateTime… »

Записал на память. Иногда требуется, чтобы буквально ткнули носом, дабы узреть очевидное ;). Фактически готовый формат, и именно в том виде, который требуется (для правильной сортировки создаваемых файлов). Самое интересное, что я и в VBScript, так же, «ручками» «клеил» строку формата из частей.


Время: 04:03.

Время: 04:03.
© OSzone.net 2001-