Войти

Показать полную графическую версию : [решено] Скопировть только самый новый файл - который создан текущей датой


dark-------13
27-04-2011, 12:45
Здравствуйте,

Имеется скрипт который копирует самый "свежий" файл в папке и шифрует его

@echo off
setlocal

for /f "tokens=*" %%i in (' dir /b "Y:\*.xml" ') do set "file=%%i"

copy "Y:\%file%" "D:\V"
cry "D:\V\%file%"

Подскажите пожалуйста, как добавить в приведенный скрипт, проверку на дату, чтобы осуществить следующее:

Скрипт должен копировать с диска Y:\ в D:\V только тот файл который является "свежим" - новым и у которого дата создания текущая.

Заранее спасибо.

amel27
27-04-2011, 13:08
Имеется скрипт который копирует самый "свежий" файл »нет, этот скрипт копирует самый последний при сортировке по имени

как добавить в приведенный скрипт, проверку на дату »
@echo off

for /f "delims=" %%i in ('dir/b/a-d/od "Y:\*.xml"') do (
for /f %%a in ("%%~ti") do if "%date%"=="%%a" set "file=%%i")

copy "Y:\%file%" "D:\V"
cry "D:\V\%file%"

dark-------13
27-04-2011, 13:35
Скопировались все файлы,а нужно, чтобы только один предположим батник запускается каждый день, а в папке много файлов xml, и каждый день в папке где много файлов создается еще один файл с текущей датой создания (и датой изменения Ну как пример сегодня 27.04.2011) его необходимо скопировать

amel27
27-04-2011, 15:43
Скопировались все файлы »вроде не должно, в батнике всего одна команда COPY

- создал диск Y: (через SUBST)
- создал на Y: три файла: 1.xml, 2.xml, 3.xml (соответственно, у всех дата одна)
- создал папку D:\V\
- запустил батник, результат:
Скопировано файлов: 1.

dark-------13
27-04-2011, 19:31
Сделал так переносятся все файлы где ошибка у меня ? Файл прикрепил вот его код
на всякий
@echo off

for /f "delims=" %%i in ('dir/b/a-d/od "H:\*.xml"') do (
for /f %%a in ("%%~ti") do set "file=%%i")

copy "H:\%file%" "X:\V"
rem cry "X:\V\%file%"

dark-------13
27-04-2011, 20:02
Пробовал так тоже все файлы копирует

@echo off

for /f "delims=" %%i in ('dir/b/a-d/od "X:\old\*.txt"') do (
for /f %%a in ("%%~ti") do set "file=%%i")

copy "X:\old\%file%" "X:\new"

В папку old кидаю файл readme.txt и создаю новый 1.txt

Foreigner
27-04-2011, 20:02
@echo off
setlocal

for /f "tokens=*" %%i in (' dir /b /od H:\*.xml ') do (

for /f "tokens=1" %%j in ( "%%~ti" ) do if "%%j"=="%date: =0%" set "file=%%i"

)

copy "H:\%file%" "X:\V"
rem cry "X:\V\%file%"

dark-------13
27-04-2011, 20:18
Нет не работает, все равно все файлы копирует, может быть убрать все лишние условия и сделать проверку просто по текущей дате - если дата в системе совпадает с датой в файле, то файл скопировать ?!
У меня Seven x64 - не знаю что еще подсказать, все остальные батники от amel27 пашут нормально - спасибо ему большое за помощь, а также всем кто мне помогает.

Foreigner
27-04-2011, 20:28
Нет не работает, все равно все файлы копирует, »
Покажи _твой_ батник. В моем может копироваться только один файл.

dark-------13
27-04-2011, 20:35
Вот прикрепил батник проверь пожалуйста что не так

Foreigner
27-04-2011, 20:50
В общем, оно не хочет выдавать %%~ti на другом диске...

@echo off
setlocal

pushd H:\

for /f "tokens=*" %%i in (' dir /b /od *.xml ') do (

for /f "tokens=1" %%j in ( "%%~ti" ) do if "%%j"=="%date: =0%" set "file=%%i"

)

popd

copy "H:\%file%" "X:\V"
rem cry "X:\V\%file%"

dark-------13
28-04-2011, 09:41
Здравствуйте, Foreigner

Вы писали мне
Ваша цитата "В общем, оно не хочет выдавать %%~ti на другом диске..."
, ниже приведенный скрипт заработал на Seven x64 вчера,а сегодня попробовал на другой машине на XP (x32), опять стал копировать все файлы, а нужно один по текущей дате, подскажите как сделать так чтобы %%~ti работало, как правильно создать текстовый файл с данным скриптом, чтобы все работало, как вы их создаете - текстовые файлы что у вас свеже написанный в них скрипт работает ?

Ваш скрипт
@echo off
setlocal

pushd H:\

for /f "tokens=*" %%i in (' dir /b /od *.xml ') do (

for /f "tokens=1" %%j in ( "%%~ti" ) do if "%%j"=="%date: =0%" set "file=%%i"

)

popd

copy "H:\%file%" "X:\V"
rem cry "X:\V\%file%"

dark-------13
28-04-2011, 21:30
Не работает так хотя батник лежит на диске X как и папки in и out

@echo off
SETLOCAL EnableDelayedExpansion

for /f "delims=" %%i in ('dir/b/a-d/od "X:\in\*.txt"') do (
for /f %%a in ("%%~ti") do if "%date%"=="%%a" set "file=%%i")

copy "X:\in\%file%" "X:\out"


Но работает так причем батник должен лежать на диске X в данном примере

@echo off
SETLOCAL EnableDelayedExpansion

for /f "delims=" %%i in ('dir/b/a-d/od "X:\*.txt"') do (
for /f %%a in ("%%~ti") do if "%date%"=="%%a" set "file=%%i")

copy "X:\%file%" "X:\out"

dark-------13
28-04-2011, 23:20
РЕШЕНО в теме http://forum.oszone.net/thread-205784.html - Не работает скрипт копирования самого свежего файла по текущей дате.
Всем спасибо.

anton_bir86
18-02-2016, 07:11
@echo off
setlocal

pushd "папка где нужно найти файлы" || goto:eof

for /f "tokens=*" %%i in (' dir /b /od *.расширение файла ') do set "last=%%i"

copy "%last%" "куда копируем"

popd

добавляем || goto:eof
ищет и копирует последний файл в папке, батник может находиться в любом месте

Iska
18-02-2016, 08:43
ищет и копирует последний файл в папке »
Или не копирует. Поскольку ищет не только файлы, но и папки.




© OSzone.net 2001-2012