Компьютерный форум 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=256803)

foma24 21-03-2013 15:57 2115661

Копирование файлов
 
Добрый день. Подскажите пожалуйста по такому вопросу - Есть файлы acp00000NNN, где NN номер по порядку. Каждый день с утра данные файлы, начиная с порядкового номера 01, начинают падать в папку C:/111/. Из этой папки их нужно скопировать в папку C:/222/ где их подхватывает другая программа и переносит к себе, т.е. после того как программа их подхватила данных файлов в папке 222 нет. Вопрос заключается в том, что из папки 111 нужно копировать только свежий, т.е. только что пришедший файл, а те которые были скопированы ранее не трогать.

Как возможно сделать подобное копирование средствами cmd или vbs, на крайний случай powershell

foma24 21-03-2013 20:37 2115819

да, старые, за вчерашний день удаляются, но в течение дня нет

Foreigner 21-03-2013 23:25 2115911

Цитата:

Цитата foma24
где NN номер по порядку. »

Т.е. последние две цифры?
С файлом для записи последнего номера
Код:

@echo off
setlocal

pushd "c:\111"

set "n=100"
2>nul (0<%date%.txt set /p "n=")

set /a n+=1
2>nul copy acp*%n:~1% "c:\222" && 1>%date%.txt echo %n%

popd


foma24 22-03-2013 09:53 2116121

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

megaloman 22-03-2013 14:03 2116270

Код:

@Echo Off
Set Otkuda=E:\111\
Set Kuda=E:\222\

If Not Exist %Otkuda%%0.log (
        Echo %Otkuda%%0.log>>%Otkuda%%0.log
)

FOR /F "usebackq delims=" %%f IN (`xcopy %Otkuda%*.* %Kuda%  /Y /EXCLUDE:%Otkuda%%0.log`) DO (
        If Exist "%%f" Echo %%f>>%Otkuda%%0.log
)

Копирую сразу всё, что не копировалось, за один запуск батника. В папке 111 создаётся лог-файл с именем батника, в который батник при копировании заносит имена файлов, которые в последствии не копируются. Утром вы очищаете папку вместе с лог-файлом. Никаких номеров не анализирую - то, что не скопировано, скопируется. Можно вместо маски *.* в xcopy поставить маску Ваших файлов, например acp00000???. , если в папке пишется что-то еще. В папку 111 батник лучше не размещать. чтобы ненароком не убить.

foma24 22-03-2013 14:29 2116286

лог лучше делать по дате, потому как папка 111 очищается другой программой, которая архивирует файлы acp каждое утро

megaloman 22-03-2013 15:33 2116317

Цитата:

лог лучше делать по дате,
- я продумывал этот вариант и отказался. Что будет, если вы запустите на новую дату батник, а 111 еще не очищен - получите кучу ненужных (дай бог, не вредных) файлов в 222.

foma24 22-03-2013 15:50 2116332

просто получается, что с утра программа предыдущий день архивирует, а этот лог тогда руками нужно очищать, либо отдельным батником

foma24 22-03-2013 16:41 2116360

все acp00000NNN, и отображает их в самой программе в меню архив (т.е. не просто складывает в папку, а учитывается в самой программе), я не знаю как она отреагирует на появление log файла, поэтому так даже боязнее чем лог по дате

Foreigner 22-03-2013 16:52 2116371

Цитата:

Цитата foma24
Как сделать так, чтобы кидались сразу несколько файлов ? »

Не проверял:
Код:

@echo off
setlocal

pushd "c:\111"

:1
set "test=0"
set "n=100"
2>nul (0<%date%.txt set /p "n=")

set /a n+=1
2>nul copy acp*%n:~1% "c:\222" && (

    1>%date%.txt echo %n%
    set "test=1"

)

if "%test%"=="1" goto:1
popd


megaloman 22-03-2013 17:04 2116386

Цитата:

что с утра программа предыдущий день архивирует
Какие имена файлов архивирует? Почему бы не заархивировать и лог? Кстати, лог-файл можно назвать acp00000LOG, и если у архиватора маска подходящая, никаких дополнительно действий не надо. По дате лог сделать тоже не проблема, но это стрёмно.
Вот вариант, где лог-файл по дате в, например, корне диска E:\
Код:

@Echo Off
Set Otkuda=E:\111\
Set Kuda=E:\222\

Set Log=E:\%Date:~6,4%%Date:~3,2%%Date:~0,2%_%~nx0.log

If Not Exist %Log% (
        Echo %Log%>>%Log%
)

FOR /F "usebackq delims=" %%f IN (`xcopy %Otkuda%*.* %Kuda%  /Y /EXCLUDE:%Log%`) DO (
        If Exist "%%f" Echo %%f>>%Log%
)

Чтобы вернуться к предыдущему способу, замените одну строку с определением Log

Set Log=%Otkuda%%0.log

Или если делать лог-файл с именем E:\111\acp00000log. то заменить такой строкой

Set Log=%Otkuda%acp00000log.

foma24 23-03-2013 10:31 2116773

Огромное спасибо !!!

foma24 25-03-2013 11:34 2117989

Вышел на работу, попробовал скрипт:

C:\>Set Otkuda=c:\111\

C:\>Set Kuda=c:\222\

C:\>Set Log=c:\20130325_"C:\test.bat".log

C:\>If Not Exist c:\20130325_"C:\test.bat".log (Echo c:\20130325_"C:\test.bat".l
og 1>>c:\20130325_"C:\test.bat".log )
Синтаксическая ошибка в имени файла, имени папки или метке тома.

C:\>pause
Для продолжения нажмите любую клавишу . . .

C:\>FOR /F "usebackq delims=" %f IN (`xcopy c:\111\*.* c:\222\ /Y /EXCLUDE:
c:\20130325_"C:\test.bat".log`) DO (If Exist "%f" Echo %f 1>>c:\20130325_"C:\tes
t.bat".log )
"xcopy" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

megaloman 25-03-2013 12:04 2118006

Цитата:

Set Log=c:\20130325_"C:\test.bat".log
-откуда здесь кавычки?
У меня Set Log=C:\%Date:~6,4%%Date:~3,2%%Date:~0,2%_%0.log - то есть файл сегодня автоматически создастся с именем C:\20130325_nameofbat.bat.log - где nameofbat.bat наименование батника (не делайте его с пробелами или на русском языке), т е имя в Вашем случае будет C:\20130325_test.bat.log
Во вторых, если батник запускаете не из текущей директории (что, судя по примеру, и произошло), то сделайте
Set Log=C:\%Date:~6,4%%Date:~3,2%%Date:~0,2%_%~nx0.log
В третих, если батник запускаете из командного окна, попробуйте выполнить ручками предварительно команды
xcopy /?
Если она выполнится успешно, батник будет работать, иначе проблемы не в батнике
Можно тогда попробовать команду Path, среди доступных путей должно быть C:\Windows\system32; иначе система не находит файл xcopy.exe
ИМХО, этот стандартный путь должен присутствовать в системе в переменных среды.

gora 25-03-2013 12:15 2118012

Цитата:

Цитата megaloman
-откуда здесь кавычки?
У меня Set Log=C:\%Date:~6,4%%Date:~3,2%%Date:~0,2%_%0.log»

Коллега, они у Вас в строке прописаны. Тильду забыли после процента в переменной %0 поставить, вот они и вылезли.
Попробуйте так:
Код:

Set Log="E:\%Date:~6,4%%Date:~3,2%%Date:~0,2%_%~nx0.log"
Ибо имя батника может содержать пробел.

megaloman 25-03-2013 13:49 2118072

gora, %0 кавычки не возвращает.

gora 25-03-2013 14:05 2118084

Цитата:

Цитата megaloman
%0 кавычки не возвращает »

Батник Обрезка переменных.bat:
Код:

@Echo Off
:: Кодировка файла 'Кирилица DOS' (866)
Echo Запись        Значение
Echo.
Echo %%0        %0
Echo %%~0        %~0
Pause>Nul

Вывод в окно консоли:
Код:

Запись  Значение

%0      "E:\Temp\Обрезка переменных.bat"
%~0    E:\Temp\Обрезка переменных.bat


foma24 25-03-2013 15:25 2118135

со всем разобрался, всем спасибо!!!

megaloman 25-03-2013 16:16 2118162

gora, Насчёт кавычек %0 я погорячился, но с кавычками у меня другая проблема, в xcopy в ключе /EXCLUDE: мне не удавалось пользоваться файлом, имя которого в кавычках.

gora 25-03-2013 18:53 2118291

Цитата:

Цитата megaloman
с кавычками у меня другая проблема, в xcopy в ключе /EXCLUDE: мне не удавалось пользоваться файлом, имя которого в кавычках. »

Там кавычки не используются (не возможно использовать).
Можно обойти так:
Код:

Set Log="E:\%Date:~6,4%%Date:~3,2%%Date:~0,2%_%~nx0.log"
For %%i In (%Log%) Do Set shortpathlog=%%~si

...
FOR /F "usebackq delims=" %%f IN (`xcopy %Otkuda%*.* %Kuda%  /Y /EXCLUDE:%shortpathlog%`) DO (
...


sov44 02-01-2014 10:30 2281907

Новогодний заклин. :lamer: Не получается скопировать скрытые файлы из одной директории в другую. Пишет - не найден файл
Код:

@echo off

for %%a in (BOOTFONT.BIN BOOTSECT.BIN WIN51 WIN51IP WIN51IP.SP2 WIN51IP.SP3) do (
for /f "delims=" %%b in ('dir /b /a:-dh "%~dp0FINISH\*"') do (
if /i "%%b"=="%%a" copy /y "%~dp0FINISH\%%b" "%~dp0grub\"
))
pause
exit


gora 02-01-2014 10:39 2281910

Цитата:

Цитата sov44
скопировать скрытые файлы »

Используйте xCopy с соответствующими ключами.


Время: 11:31.

Время: 11:31.
© OSzone.net 2001-