Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.54/48: Рейтинг темы: голосов - 48, средняя оценка - 4.54
Dimonsky
3 / 3 / 0
Регистрация: 14.10.2012
Сообщений: 18
1

Копирование на флешку папки, имя которой меняется

14.10.2012, 16:00. Просмотров 9202. Ответов 36
Метки нет (Все метки)

Имеется папка на рабочем столе "Данные (14.10.2012)" Завтра она будет "Данные (15.10.2012)" итд. Как создать сценарий, который будет копировать ее содержимое в корневище флэшки (тоесть не саму папку "Данные (14.10.2012)" а те папки и файлы которые внутри нее в корневище J:\) с учетом того что ее название каждый день новое за счет текущей даты

Добавлено через 3 часа 28 минут
Забыл добавить что конструкция на основе xcopy "%USERPROFILE%\Рабочий стол\Данные (%date:~0,2%.%date:~3,2%.%date:~6,4%)" "J:\" не пройдет, поскольку папка "Данные (14.10.2012)" не обязательно будет иметь в имени дату сегодняшнего дня, она может быть создана неделю назад например итд ("Данные (07.10.2012)" итд)
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.10.2012, 16:00
Ответы с готовыми решениями:

Копирование TXT-файлов из одной папки и BMP-файлов из другой папки в папку, в которой находится пакетный файл
Доброго времени суток. У кого есть возможность сообразить какой код мне...

Переименовать файл в имя папки, в которой он находится
есть 30 папок с разными названиями в каждой папке 1 файл, его надо...

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

Копирование определённых файлов из папки, в которой находится сам копирующий bat-файл, в папку игры "Steam"
Здравствуйте, пишу скрипт который должен скопировать из текущей папки(где сам...

Создание копии папки со случайным именем и копирование ее (папки) в заданный раздел
Подскажите как сделать в .bat создание копии папки со случайным именем и...

36
Dimonsky
3 / 3 / 0
Регистрация: 14.10.2012
Сообщений: 18
31.10.2012, 09:29  [ТС] 21
Но вроде нашел рабочее решение методом тыка - определять букву флешки по типу и размеру тома больше нуля на основе конструкции
Bash
1
2
For /F "Tokens=2 Delims==" %%A In ('WMIC LogicalDisk Where "drivetype=2 and size>0" Get Name /Value') Do Set Usb=%%A
if not defined Usb Goto eof
Всем спасибо еще раз
2
Dragokas
Эксперт WindowsАвтор FAQ
17049 / 7106 / 859
Регистрация: 25.12.2011
Сообщений: 10,918
Записей в блоге: 16
31.10.2012, 13:47 22
fsutil слишком привязана к локале. Не хочется ее применять, а английской под рукой нет.

Вот с повторным запросом. Код некрасив, но работать будет в любых условиях:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@echo off
setlocal EnableDelayedExpansion
 
:: Определяем букву первого раздела флешки
:: Исключаем устройства с пометкой "не готово" (например, кард-ридеры)
For /F "Tokens=2 Delims==" %%A In ('WMIC LogicalDisk Where ^(DriveType^=2 And MediaType^=NULL^) Get Name /Value') Do (
  For /F "Tokens=2 Delims==" %%B In ('WMIC LogicalDisk Where "VolumeSerialNumber Is Not Null" Get Name /Value') Do (
  (if %%A==%%B Set Usb=%%A & goto :nxt)
))
 
:nxt
::Если флешка не найдена - выходим из программы
if not defined Usb Goto :eof
 
:: Ищем папку Данные (хх.хх.хххх) на рабочем столе пользователя (по условию она одна) и копируем её содержимое в корень флешки.
for /f "delims=" %%B in ('dir /b/ad "%UserProfile%\Рабочий стол\*" ^|find "Данные"') do (
  xcopy /e/y/h "%UserProfile%\Рабочий стол\%%B" "%USB%\"
)
pause
Добавлено через 10 минут
Dimonsky, да, вариант.

Но еще и MediaType добавить, чтобы флоппи-диск и съемные ЖД не попались:
Bash
For /F "Tokens=2 Delims==" %%A In ('WMIC LogicalDisk Where "drivetype=2 and size>0 and MediaType=NULL" Get Name /Value') Do (
1
Dragokas
Эксперт WindowsАвтор FAQ
17049 / 7106 / 859
Регистрация: 25.12.2011
Сообщений: 10,918
Записей в блоге: 16
13.11.2012, 00:42 23
Нашел у себя в архивах код с использованием VolumeSerialNumber через один запрос.
Немного подпилил. Получаем имя диска магией:

Bash
1
2
3
4
5
6
7
8
9
10
@echo off
For /F "Tokens=1,2* Delims==" %%i In ('WMIC LogicalDisk Where ^(DriveType^=2 And MediaType^=NULL^) Get Name^,VolumeSerialNumber /Value^|Find "="') Do Call :TestDisk %%i %%j
echo %USB%
pause
exit
 
:TestDisk
 Set $%1=%2
 If %1==VolumeSerialNumber If Defined $%1 Set USB=%$Name%
EXIT /B
1
sotik
1 / 1 / 0
Регистрация: 20.01.2014
Сообщений: 87
26.01.2014, 23:15 24
Здравствуйте.
Мне нужно вывести буквы и названия флешек, делаю так:
Bash
1
for /f %%a in ('wmic logicaldisk where drivetype^=2 get name') do if exist %%a (echo %%a)
пока выводятся только буквы.
Значит вроде как надо добавить VolumeName после get name
Только пока не знаю как синтаксически правильно,подскажите пожалуйста.
0
Dragokas
Эксперт WindowsАвтор FAQ
17049 / 7106 / 859
Регистрация: 25.12.2011
Сообщений: 10,918
Записей в блоге: 16
26.01.2014, 23:40 25
Цитата Сообщение от sotik Посмотреть сообщение
if exist %%a
На этом получите много окон вида "Устройство не готово" на системе с кардридером.

Bash
1
WMIC LogicalDisk Where (DriveType=2 And MediaType=NULL And VolumeSerialNumber Is Not Null) Get Name, VolumeName /Value | findstr /I /C:"Name" /C:"VolumeName"
1
sotik
1 / 1 / 0
Регистрация: 20.01.2014
Сообщений: 87
27.01.2014, 01:48 26
В этой строке как это правильно написать? :
Bash
1
for /f %%a in ('wmic logicaldisk where drivetype^=2 get name^, VolumeName') do if exist %%a (echo %%a)
я сюда добавил ^, VolumeName
но все равно выводит только букву без названия самой флешки.
0
Dragokas
Эксперт WindowsАвтор FAQ
17049 / 7106 / 859
Регистрация: 25.12.2011
Сообщений: 10,918
Записей в блоге: 16
27.01.2014, 02:03 27
sotik, а что Вы хотите от меня? Я уже написал, как будет правильно.
0
sotik
1 / 1 / 0
Регистрация: 20.01.2014
Сообщений: 87
27.01.2014, 13:39 28
Благодарю за ответ.Не пойму только почему в моем решении показывает только букву и без названия...
А можно в вашем решении сообщать вместо VolumeName - по-русски "название флешки...."?!
0
Dragokas
Эксперт WindowsАвтор FAQ
17049 / 7106 / 859
Регистрация: 25.12.2011
Сообщений: 10,918
Записей в блоге: 16
27.01.2014, 22:38 29
Bash
1
2
3
4
5
6
7
8
9
10
@echo off
SetLocal EnableExtensions
For /F "tokens=1* delims==" %%a in (
  'WMIC LogicalDisk Where ^(DriveType^=2 And MediaType^=NULL And VolumeSerialNumber Is Not Null^) Get Name^, VolumeName /Value^
  ^| findstr /I /C:"Name" /C:"VolumeName"'
) do (
  if /i "%%a"=="Name" echo Диск: %%b
  if /i "%%a"=="VolumeName" echo Метка: %%b
)
pause
2
sotik
1 / 1 / 0
Регистрация: 20.01.2014
Сообщений: 87
28.01.2014, 11:29 30
Огромное спасибо! То что надо.
Еще маленький вопросик:
Можно ли добавить еще один функционал?
Наш код очень хорошо справляется с распознаванием флешек,но вот когда я подключаю внешний жесткий диск к usb с ntfs на борту, то его уже наш код не видит...
0
Borodа
98 / 92 / 8
Регистрация: 07.08.2013
Сообщений: 299
28.01.2014, 12:51 31
sotik, кстати он не увидит и флешки, которые детектятся как жесткий диск.
0
Dragokas
Эксперт WindowsАвтор FAQ
17049 / 7106 / 859
Регистрация: 25.12.2011
Сообщений: 10,918
Записей в блоге: 16
28.01.2014, 21:27 32
Так и должно быть. Чуть выше я об этом отдельно говорил.
0
martishz
0 / 0 / 0
Регистрация: 10.10.2014
Сообщений: 4
13.10.2014, 20:29 33
скажите а что ещё нужно добавить чтобы все скачиволось не в корень флэшки а в определённую папку?
0
marianoredondo
0 / 0 / 0
Регистрация: 13.11.2014
Сообщений: 23
02.12.2015, 19:52 34
Цитата Сообщение от sov44 Посмотреть сообщение
Bash
1
2
3
4
5
6
7
8
@echo off
setlocal EnableDelayedExpansion
:: Определяем букву флешки (при условии, что вставлена только одна флешка)
For /F "Tokens=2 Delims==" %%A In ('WMIC LogicalDisk Where ^(DriveType^=2 And MediaType^=NULL^) Get Name /Value') Do Set Usb=%%A
:: Ищем папку Данные (хх.хх.хххх) на рабочем столе пользователя (по условию она одна) и копируем её содержимое в корень флешки.
for /f "delims=" %%B in ('dir /b/s/ad "%UserProfile%\Рабочий стол\*" ^|find "Данные"') do copy /y "%%B\*" %USB%
pause
GoTo :EOF
А если использовать "банальный" метод копирования одного каталога со всем его содержимым на флешку, буква которой может меняться, тогда как можно использовать "автоматическое" определение буквы флешки, при условии что вставлена одна флешка?
Пример моего батника:
Windows Batch file
1
2
3
xcopy "D:\Doc1" "L:\Doc1" /H /Y /C /R /E /I /G /D
xcopy "D:\Doc2" "L:\Doc2" /H /Y /C /R /E /I /G /D
xcopy "D:\Doc3" "L:\Doc3" /H /Y /C /R /E /I /G /D
В данному примере L - буква флешки, но это значение не постоянное.
Подскажите пожалуйста?
0
Dragokas
Эксперт WindowsАвтор FAQ
17049 / 7106 / 859
Регистрация: 25.12.2011
Сообщений: 10,918
Записей в блоге: 16
02.12.2015, 20:30 35
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
@echo off
SetLocal EnableExtensions
For /F "tokens=1* delims==" %%a in (
  'WMIC LogicalDisk Where ^(DriveType^=2 And MediaType^=NULL And VolumeSerialNumber Is Not Null^) Get Name^, VolumeName /Value^
  ^| findstr /I /C:"Name" /C:"VolumeName"'
) do (
  if /i "%%a"=="Name" set "disk=%%b"
  if /i "%%a"=="VolumeName" echo Метка: %%b
)
xcopy "D:\Doc1" "%disk%\Doc1" /H /Y /C /R /E /I /G /D
pause
1
marianoredondo
0 / 0 / 0
Регистрация: 13.11.2014
Сообщений: 23
02.12.2015, 20:45 36
Dragokas,
Большое спасибо за быстрый ответ.
Все работает.
Нужно ли в дополнении использовать еще такой код:
Windows Batch file
if not defined Usb Goto :eof
Или в этом нет необходимости?
В любом случае благодарю за помощь.
0
Dragokas
Эксперт WindowsАвтор FAQ
17049 / 7106 / 859
Регистрация: 25.12.2011
Сообщений: 10,918
Записей в блоге: 16
02.12.2015, 21:12 37
Можете дописать в начало 10-й строки:
Windows Batch file
1
if defined Disk
на случай, чтобы команда xcopy не выполнялась, когда флешка не вставлена.
0
02.12.2015, 21:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2015, 21:12

Копирование: Ввод имени папки и копирование из нее файлов
Доброго времени суток! Реально ли реализовать подобное с помощью bat ? Знаю,...

Копирование на флешку одного файла
Привет помогите написать бантик Имеется файл wand.dat, лежит обычно тут...

Копирование нескольких файлов из локальной папки в две сетевые папки с последующим удалением исходных файлов
Есть практическая задача: нужно накидать батник, который будет в определённое...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru