Имя пользователя:
Пароль:
 | Правила  

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

Ответить
Настройки темы
CMD/BAT - [решено] Выбор файла из меню и копирование в нужную директорию.

Новый участник


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

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


Доброго дня. Помогите незнатоку одолеть следующую задачу. Имеется папка (к примеру на флешке), в ней находится определенное, изменяющееся количество файлов с одним и тем же расширением. При запуске батника нужно, чтобы проверялась эта папка и выводилось меню с выбором файлов. После выбора одного из них, его необходимо скопировать в другую директорию (на жесткий диск).

Отправлено: 23:02, 14-02-2011

 

Новый участник


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

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


Ну как, друзья мои, столько народу просмотрело, и никто не знает решения? Помогите плиз, шибко нужно!

Отправлено: 07:34, 16-02-2011 | #2



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

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


Новый участник


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

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


Вот чем мне смогли помочь:
Код: Выделить весь код
@echo off
if exist choose.txt del /f choose.txt
setlocal enabledelayedexpansion
set q=1
set papka1=F:\Backups
set papka2=D:\New
if not exist "%papka2%" md "%papka2%"
for /f "tokens=*" %%i in ('dir /b "%papka1%"') do (
    echo !q!.%%i
    echo !q!;%%i>> choose.txt
    set /a q+=1
)
echo.
set /p vibor="Enter number of file: "
echo.
for /f "delims=; tokens=1,2" %%i in ('more choose.txt') do (
   if "%vibor%"=="%%i" copy /y "%%j" "%papka2%"
)
del /f choose.txt
pause
Он сканирует папку F:\Backups, создает текстовый файл-список, выводит меню выбора, но при выборе номера файла пишет, что файл не найден...
В чем подвох?..

Отправлено: 10:22, 16-02-2011 | #3


Googler


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

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


Код: Выделить весь код
@echo off

set SRC=C:\TEST
set DST=E:\TEST

if not exist "%SRC%" echo ERROR:"%SRC%" not exist!& pause>nul& exit
if not exist "%DST%" md "%DST%"||(echo ERROR:"%DST%" not exist!& pause>nul& exit)

:LOOP
 cls
 echo 1. List files from directory: "%SRC%"
 echo 2. Copy single file to directory: "%DST%"
 echo 3. Exit
 echo(
 set /p $F="Select menu item [1-3]:"
 set /a "$F=%$F%+0"

 if %$F% equ 1 call:SUB_1& echo(&pause
 if %$F% equ 2 call:SUB_2& echo(&pause
 if %$F% equ 3 Exit
GoTo:LOOP

:SUB_1
 cls
 echo Files in "%SRC%":
 echo(
 pushd "%SRC%"
 dir/b/a-d *|findstr/n $|more
 popd
GoTo:EOF

:SUB_2
 cls
 call:SUB_1
 set /p $2="Enter file name or number in list:"
 set "$2=%$2:\=\\%"
 pushd "%SRC%"
 for /f "tokens=1* delims=:" %%a in (
'dir/b/a-d *^|findstr/n $^|findstr/irc:"^%$2%:" /c:":%$2%$"'
) do copy/-y "%SRC%\%%b" "%DST%\"
 popd
GoTo:EOF
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:05, 16-02-2011 | #4


Ветеран


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

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


Так?!
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sFolderSource=E:\Песочница\0033\01
set sFolderDest=E:\Песочница\0033\02

if not exist "%sFolderDest%" md "%sFolderDest%"

dir /b /a:-d "%sFolderSource%" |find.exe /n /v ""

echo.
set /p iChoose="Enter file's number: " && set /a iChoose-=1
echo.

for /f "delims=" %%i in (
	'dir /b /a:-d "%sFolderSource%"^|more +%iChoose%'
) do copy /y "%sFolderSource%\%%i" "%sFolderDest%\" & goto :LabelBreak

:LabelBreak

endlocal
exit /b 0
2amel27: как обойтись без костыля:
Код: Выделить весь код
…& goto :LabelBreak

:LabelBreak
дабы делать только один проход в цикле разбора? Как-то видел у Вас иной вариант, но забыл.
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:56, 16-02-2011 | #5


Googler


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

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


Цитата Iska:
как обойтись без костыля »
увы, никак... AFAIK единственный способ прервать цикл - перейти по метке, обходной путь - отфильтровать только одну строку (как в моём примере выше - через дополнительный FindStr)
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:01, 16-02-2011 | #6


Ветеран


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

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


Цитата amel27:
…обходной путь - отфильтровать только одну строку (как в моём примере выше - через дополнительный FindStr) »
Точно, помнится, так и было! Спасибо за напоминание.

Отправлено: 13:17, 16-02-2011 | #7


Googler


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

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


Iska, а вот... еще применял такой прием:

Код: Выделить весь код
set "$F=F"& for /f "delims=" %%i in (
'dir /b /a:-d "%sFolderSource%"^|more +%iChoose%') do (
set "$F="&& copy /y "%sFolderSource%\%%i" "%sFolderDest%\"
)
Хоть это и не выход из цикла, но работает быстрей... До того как отработает DIR работа скрипта не продолжится, а GoTo - очень медленная команда, которая заключается в построчном просмотре всего батника, поиска нужной строки и установки нового значения счетчика команд... т.е. является операцией ввода-вывода, в то время как блок FOR предварительно прочитывается и кэшируется целиком (аналогично блоку кода в скобках).
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:12, 16-02-2011 | #8


Аватара для El Sanchez

Ветеран


Contributor


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

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


Позвольте свой вариант:
Код: Выделить весь код
@Echo Off
Set Source=C:\Source
Set Output=C:\Output

If Not Exist "%Source%" Echo Source directory not found! Exit.&Exit /B 1
If Not Exist "%Output%" Echo Output directory not found! Exit.&Exit /B 1

SetLocal
For /F "Tokens=1* Delims=:" %%A In ('Dir /B /A-D "%Source%"^|FindStr /N .') Do Set _%%A=%%B&Echo %%A: %%B
Echo.
Set /P "Choice=Enter file's number: "
If Defined _%Choice% (Call Copy /Y "%Source%\%%_%Choice%%%" "%Output%\") Else (Echo Wrong number! Exit.)
EndLocal
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:33, 16-02-2011 | #9


Ветеран


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

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


amel27, спасибо, добавил в «Избранное».

Отправлено: 19:23, 16-02-2011 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Нахождение и выбор папки и её копирование ikif Скриптовые языки администрирования Windows 1 30-12-2010 12:01
Разное - Как изменить добавление надписи "Копия" при копировании файла в исходную директорию Keleborn Microsoft Windows 2000/XP 3 08-07-2009 14:21
[Вопрос] Svcpack и копирование файла с CD ya158 Автоматическая установка Windows 2000/XP/2003 8 11-11-2008 21:58
Ошибка при копирование файла. slavamlad Microsoft Windows 2000/XP 12 13-03-2005 03:49
Двойное копирование файла с FTP. :( BlackMonk Хочу все знать 3 13-02-2005 09:08




 
Переход