Batch script???
6 отговора
0 прегледа
Batch script???
Здравейте,
бихте ли ми помогнали с един batch скрипт: идеята е да копира последно създаден/модифициран файл от дадена директория в друга. Copy e ясно, както и "dir /O-D". Прочетох, че обединението става с |, но нещо не се получава. Как да взема само първия от листа с файлове, върнат от дир командата?
Мерси предварително!
бихте ли ми помогнали с един batch скрипт: идеята е да копира последно създаден/модифициран файл от дадена директория в друга. Copy e ясно, както и "dir /O-D". Прочетох, че обединението става с |, но нещо не се получава. Как да взема само първия от листа с файлове, върнат от дир командата?
Мерси предварително!
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
Re: Batch script???
Мерси много! Работи. Аз попаднах на командата xcopy, която може да върне всички файлове след дадена дата. Пак става. А и още нещо да питам: имам около 200 директории, като целта ми е да копирам най-новия файл от всяка една от тях в дадена дир. Т.е. за сега съм написал това, коети ти ми даде 200 пъти, та има ли вариант да е веднъж, т.е. тези дир да го обознача със * или нещо подбно? Проблем може би ще се окаже, че файловете са с различни имена, а в един експрешън май не може да има повече от една *.
Мерси предварително!
Мерси предварително!
Re: Batch script???
pushd %FROM_DIR%
FOR /F %%i IN ('DIR /O-D /A-D /B') do (
Това трябва да ти даде насоки
FOR /F %%i IN ('DIR /O-D /A-D /B') do (
Това трябва да ти даде насоки
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^>
[линк]
Re: Batch script???
Мерси, това е почти идеално :-). Явява се проблем, понеже имам директории с празен интервал в името, както и такива с & символ. Това може ли да се избегне някакси в скрипта? А как да изключа копирането на най-новия файл от source_path, т.е. трябват ми само тези от поддиректориите?
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^>
[линк]