Batch script???

6 отговора 0 прегледа
#1

Batch script???

Здравейте,

бихте ли ми помогнали с един batch скрипт: идеята е да копира последно създаден/модифициран файл от дадена директория в друга. Copy e ясно, както и "dir /O-D". Прочетох, че обединението става с |, но нещо не се получава. Как да взема само първия от листа с файлове, върнат от дир командата?

Мерси предварително!

Отговор
в отговор на EroS #2

Re: Batch script???


@echo off

SET FROM_DIR=c:\temp
SET TO_DIR=c:\temp2

pushd %FROM_DIR%
FOR /F %%i IN ('DIR /O-D /A-D /B') do (
copy %%i %TO_DIR%
goto out
)
:out
popd


Отговор
в отговор на NiL^ #3

Re: Batch script???

Мерси много! Работи. Аз попаднах на командата xcopy, която може да върне всички файлове след дадена дата. Пак става. А и още нещо да питам: имам около 200 директории, като целта ми е да копирам най-новия файл от всяка една от тях в дадена дир. Т.е. за сега съм написал това, коети ти ми даде 200 пъти, та има ли вариант да е веднъж, т.е. тези дир да го обознача със * или нещо подбно? Проблем може би ще се окаже, че файловете са с различни имена, а в един експрешън май не може да има повече от една *.

Мерси предварително!

Отговор
в отговор на EroS #4

Re: Batch script???

pushd %FROM_DIR%

FOR /F %%i IN ('DIR /O-D /A-D /B') do (

Това трябва да ти даде насоки

Отговор
в отговор на EroS #5

Re: Batch script???

@echo off

if "%2"=="" goto :usage
for /r %1 %%j in (.) do call :copy_last "%%~dpnxj" "%~dpnx2"
goto :eof
:copy_last
FOR /F %%i IN ('DIR /O-D /A-D /B %1 2^> nul') do (
echo %~1\%%i
copy "%~1\%%i" %2 > nul
goto :eof
)
goto :eof
:usage
echo %~nx0 ^<source_path^> ^<dest_path^>


[линк]
Отговор
в отговор на wqw #6

Re: Batch script???

Мерси, това е почти идеално :-). Явява се проблем, понеже имам директории с празен интервал в името, както и такива с & символ. Това може ли да се избегне някакси в скрипта? А как да изключа копирането на най-новия файл от source_path, т.е. трябват ми само тези от поддиректориите?

Отговор
в отговор на EroS #7

Re: Batch script???

@echo off

if "%2"=="" goto :usage
for /r %1 %%j in (.) do if not "%~dpnx1"=="%%~dpnxj" call :copy_last "%%~dpnxj" "%~dpnx2"
goto :eof
:copy_last
FOR /F "delims=|" %%i IN ('DIR /O-D /A-D /B %1 2^> nul') do (
echo %1\"%%i"
copy %1\"%%i" %2 > nul
goto :eof
)
echo %1 is empty
goto :eof
:usage
echo %~nx0 ^<source_path^> ^<dest_path^>


[линк]
Отговор