Войти

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


Сантей
13-03-2014, 13:17
Здраствуйте! Помогите разобраться, задача такая: надо копировать из папки 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
@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
Georgio, Огромное спасибо! :) все копируется, вот только VOBы почему-то получаются размером от килобайта до 8.5, а исходно 250-350 Мб. Вы не могли бы помочь разобраться?

Georgio
14-03-2014, 13:46
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
Georgio, Еще раз благодарю Вас! Помогло:)

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

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

Сантей
26-03-2014, 18:31
Ребят, больше вариантов не будет? :)

Georgio
24-06-2014, 15:50
Ребят, больше вариантов не будет? »


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

@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
Georgio, Спасибо, теперь на ура копирует




© OSzone.net 2001-2012