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

Сантей 13-03-2014 13:17 2322984

Копирование файлов из переменных директорий
 
Здраствуйте! Помогите разобраться, задача такая: надо копировать из папки 303 все файлы *.VOB по очереди в папку 303_gotov с именем из 303.txt
Структура папок такова:

Код:

303\1. <Исполнитель>\Disk\*.VOB
    2. <Исполнитель>\Disk\*.VOB
    3. <Исполнитель>\Disk\*.VOB
    и т.д.

Исполнитель постоянно меняется, содержание файла 303.txt:

Код:

01. <Исполнитель> - <Название>
02. <Исполнитель> - <Название>
03. <Исполнитель> - <Название>
и т.д.

Скрипт в принципе готов (может он далек от совершенства), но проблема именно в произвольных исполнителях в пути к файлу

Код:

@echo OFF
set /p number_FM=Введите номер выпуска:
md %number_FM%_gotov
set name_txt=%number_FM%.txt
for /f "usebackq  delims=" %%i in (`find /n /v "" %name_txt% ^| find "[1]"`) do (set name_file=%%i)
echo Копируем 1-ый клип
copy "%number_FM%\1.*\Disk\*.VOB" "%number_FM%_gotov\%name_file:~3%.VOB" >nul
for /f "usebackq  delims=" %%i in (`find /n /v "" %name_txt% ^| find "[2]"`) do (set name_file=%%i)
echo Копируем 2-ый клип
copy "%number_FM%\2.*\Disk\*.VOB" "%number_FM%_gotov\%name_file:~3%.VOB" >nul
for /f "usebackq  delims=" %%i in (`find /n /v "" %name_txt% ^| find "[3]"`) do (set name_file=%%i)
echo Копируем 3-ый клип
copy "%number_FM%\3.*\Disk\*.VOB" "%number_FM%_gotov\%name_file:~3%.VOB" >nul
for /f "usebackq  delims=" %%i in (`find /n /v "" %name_txt% ^| find "[4]"`) do (set name_file=%%i)
echo Копируем 4-ый клип
copy "%number_FM%\4.*\Disk\*.VOB" "%number_FM%_gotov\%name_file:~3%.VOB" >nul
pause


Georgio 14-03-2014 07:30 2323353

Код:

@echo off
chcp 1251>nul
:#
echo Enter the issue number.
echo.
set /p number_FM=
cls
if not defined number_FM goto:#
echo    The issue number is %number_FM%.
if exist %number_FM%.txt (
 if not exist %number_FM%_gotov (
  md %number_FM%_gotov
 )
)

(
for /f "usebackq delims=" %%i in ("%number_FM%.txt") do (
 set /a m+=1
 for /f "tokens=2 delims=:" %%j in ('
  dir "%number_FM%" /ad /b^| findstr /n "^"^| call findstr /b %%m%%:
') do (
  copy "%number_FM%\%%j\Disk\*.VOB" "%number_FM%_gotov\%%i.VOB"&& set /a n+=1
  )
 )
)>nul 2>&1

echo.
if not defined m set m=0
echo    %m% strings were found in the text file.
echo.
if not defined n set n=0
echo    %n% files were copied.
echo.
for /l %%i in (1 1 50) do set /p=#<nul& for /l %%j in (1 1 10) do pause<nul>nul
pause>nul
exit /b


Сантей 14-03-2014 13:05 2323504

Georgio, Огромное спасибо! :) все копируется, вот только VOBы почему-то получаются размером от килобайта до 8.5, а исходно 250-350 Мб. Вы не могли бы помочь разобраться?

Georgio 14-03-2014 13:46 2323527

Цитата:

Цитата Сантей
VOBы почему-то получаются размером от килобайта до 8.5, а исходно 250-350 Мб »

Затрудняюсь что-либо предположить. Я с этой проблемой не сталкивался. Попробуйте выполнить копирование с параметрами "/b":
Код:

copy "%number_FM%\%%j\Disk\*.VOB" /b "%number_FM%_gotov\%%i.VOB" /b&& set /a n+=1
.

Сантей 14-03-2014 14:01 2323535

Georgio, Еще раз благодарю Вас! Помогло:)

Сантей 18-03-2014 18:21 2325344

Georgio, только что заметил, не правильный порядок копирования, 1-ый остается 1-ым, а дальше 2-ой копируется под 10-ым названием, 3 клип->11 строка, 4->12... а дальше меняются - 10 клип->2 строка, 11->3 и т.д.

Сантей 18-03-2014 19:12 2325364

Georgio, тут скорей не в текстовике проблема, а в названии папок - "1.", "2.", "3." и т.д. Надо нули добавлять

Сантей 26-03-2014 18:31 2328953

Ребят, больше вариантов не будет? :)

Georgio 24-06-2014 15:50 2367923

Цитата:

Цитата Сантей
Ребят, больше вариантов не будет? »


Сантей, если ещё актуально, то попробуйте:

Код:

@echo off
chcp 1251>nul
:#
echo Enter the issue number.
echo.
set /p number_FM=
cls
if not defined number_FM goto:#
echo    The issue number is %number_FM%.
if exist "%number_FM%.txt" (
 if not exist "%number_FM%_gotov" (
  md "%number_FM%_gotov"
  )
 ) else (
 echo "%number_FM%.txt" is absent.
 pause>nul
 exit /b
 )
for /d %%i in ("%number_FM%\*") do (
 for /f "delims=." %%j in ("%%~nxi") do (
  set $index=%%j
  call set $index=0%%$index%%
  for /f "tokens=*" %%k in ('
  call findstr /b %%$index:~-2%%\. "%number_FM%.txt"
  ') do (
  set /a m+=1
  copy "%%i\Disk\*.VOB" /b "%number_FM%_gotov\%%k.VOB" /b>nul&& (
  set /a n+=1
  )
  )
  )
 )
echo.
if not defined m set m=0
echo    %m% strings were found in the text file.
echo.
if not defined n set n=0
echo    %n% files were copied.
echo.
for /l %%i in (1 1 50) do set /p=#<nul& for /l %%j in (1 1 10) do pause<nul>nul
pause>nul
exit /b

.

Сантей 25-06-2014 14:57 2368344

Georgio, Спасибо, теперь на ура копирует


Время: 03:42.

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