Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Копирование файлов из переменных директорий

Ответить
Настройки темы
CMD/BAT - [решено] Копирование файлов из переменных директорий

Аватара для Сантей

Пользователь


Сообщения: 47
Благодарности: 2

Профиль | Отправить PM | Цитировать


Изменения
Автор: Сантей
Дата: 18-03-2014
Здраствуйте! Помогите разобраться, задача такая: надо копировать из папки 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

Отправлено: 13:17, 13-03-2014

 

Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@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
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:30, 14-03-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Сантей

Пользователь


Сообщения: 47
Благодарности: 2

Профиль | Отправить PM | Цитировать


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

Последний раз редактировалось Сантей, 14-03-2014 в 13:25.


Отправлено: 13:05, 14-03-2014 | #3


Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


Цитата Сантей:
VOBы почему-то получаются размером от килобайта до 8.5, а исходно 250-350 Мб »
Затрудняюсь что-либо предположить. Я с этой проблемой не сталкивался. Попробуйте выполнить копирование с параметрами "/b":
Код: Выделить весь код
copy "%number_FM%\%%j\Disk\*.VOB" /b "%number_FM%_gotov\%%i.VOB" /b&& set /a n+=1
.
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:46, 14-03-2014 | #4


Аватара для Сантей

Пользователь


Сообщения: 47
Благодарности: 2

Профиль | Отправить PM | Цитировать


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

Отправлено: 14:01, 14-03-2014 | #5


Аватара для Сантей

Пользователь


Сообщения: 47
Благодарности: 2

Профиль | Отправить PM | Цитировать


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

Отправлено: 18:21, 18-03-2014 | #6


Аватара для Сантей

Пользователь


Сообщения: 47
Благодарности: 2

Профиль | Отправить PM | Цитировать


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

Отправлено: 19:12, 18-03-2014 | #7


Аватара для Сантей

Пользователь


Сообщения: 47
Благодарности: 2

Профиль | Отправить PM | Цитировать


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

Отправлено: 18:31, 26-03-2014 | #8


Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


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

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

Код: Выделить весь код
@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
.

Последний раз редактировалось Georgio, 24-06-2014 в 16:32.

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:50, 24-06-2014 | #9


Аватара для Сантей

Пользователь


Сообщения: 47
Благодарности: 2

Профиль | Отправить PM | Цитировать


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

Отправлено: 14:57, 25-06-2014 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Копирование файлов из переменных директорий

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Копирование файлов из списка dima05605 Скриптовые языки администрирования Windows 2 05-09-2012 17:48
CMD/BAT - копирование файлов из подкаталогов bojfriend Скриптовые языки администрирования Windows 8 31-08-2011 01:49
Win32 API - Копирование всех файлов из директории DaRiYs Программирование и базы данных 4 03-09-2009 23:36
Разное - Копирование файлов из локальной сети Awes Microsoft Windows Vista 5 14-08-2007 21:33
[решено] Автоматическое удаление файлов из директорий BigMac Microsoft Windows NT/2000/2003 19 29-05-2005 22:32




 
Переход