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

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

14.10.2012, 16:00. Просмотров 9518. Ответов 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"
Здравствуйте, пишу скрипт который должен скопировать из текущей папки(где сам скрипт) в папку в...

Копирование папки на флешку
Ребят, выручайте, нужна прога до четверга! Нужна программа, которая при запуске скопирует папку...

36
Dragokas
Эксперт WindowsАвтор FAQ
17058 / 7113 / 861
Регистрация: 25.12.2011
Сообщений: 10,924
Записей в блоге: 16
14.10.2012, 19:51 2
А что делать при совпадении копируемых имен файлов в целовой папке?
0
Dimonsky
3 / 3 / 0
Регистрация: 14.10.2012
Сообщений: 18
15.10.2012, 08:25  [ТС] 3
На флешке, если файлы совпали имена, надо будет их без предупреждения заменить. Папка "Данные (14.10.2012)" на рабочем столе находится всегда одна, не зависимо от даты когда она сделана (тоесть если ее делали неделю назад - будет лежать одна папка "Данные (07.10.2012)", если вчера "Данные (14.10.2012)" - более старая будет удалена итд)
0
Dragokas
Эксперт WindowsАвтор FAQ
17058 / 7113 / 861
Регистрация: 25.12.2011
Сообщений: 10,924
Записей в блоге: 16
15.10.2012, 11:54 4
Имя флешки J:\
или с расчетом, что может изменяться (по иногда произвольным причинам) ?
0
Dimonsky
3 / 3 / 0
Регистрация: 14.10.2012
Сообщений: 18
15.10.2012, 16:32  [ТС] 5
Обычно J:\ хотя пару раз было дело что менялась на I:\
0
sov44
1760 / 744 / 128
Регистрация: 09.04.2011
Сообщений: 1,314
15.10.2012, 19:12 6
Bash
1
2
3
4
5
6
7
8
9
10
11
@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
3
Dimonsky
3 / 3 / 0
Регистрация: 14.10.2012
Сообщений: 18
15.10.2012, 21:50  [ТС] 7
Все работает, огромная уважуха чуваки
0
Dragokas
Эксперт WindowsАвтор FAQ
17058 / 7113 / 861
Регистрация: 25.12.2011
Сообщений: 10,924
Записей в блоге: 16
16.10.2012, 00:23 8
Защита от отсутствия флешки.

Добавить в строку № 6:
Bash
if not defined Usb Goto :eof
Хотя и так ничего фатального не произойдет.

sov44,
0
Dimonsky
3 / 3 / 0
Регистрация: 14.10.2012
Сообщений: 18
16.10.2012, 09:25  [ТС] 9
Кстати забыл, на будущее, вдруг возможно в папке "Данные (14.10.2012)" появятся каталоги с кучей подкаталогов включающих системные и скрытые файлы, тогда do copy /y "%%B\*" %USB% надо заменить на do xcopy /s /h /k /y "%%B\*" %USB%?
0
sov44
1760 / 744 / 128
Регистрация: 09.04.2011
Сообщений: 1,314
16.10.2012, 18:45 10
Dimonsky, звёздочка в "%%B\*" выделяет все папки, скрытые и не скрытые файлы, иными словами всё, что есть в папке, copy /y копирует их, не вызывая запроса на исполнение. Ничего в коде менять не надо.
0
Dimonsky
3 / 3 / 0
Регистрация: 14.10.2012
Сообщений: 18
16.10.2012, 20:31  [ТС] 11
У меня ситуация следующая - есть папка на рабочем столе "Данные (14.10.2012)" в ней 10 файлов без папок в корневище. При исполнении сценария эти 10 файлов оказываются в корневище флешки. Если я создам в папке "Данные (14.10.2012)" папку "Новая папка" и положу туда половину файлов (5 в корневище и 5 в "Новой папке") то после исполнения сценария все 10 файлов оказываются опять в корневище флэшки, "Новая папка" на флэшку не копируется. Если сделать "Новая папка" скрытой, то при исполнении сценария в корневище флэшки копируется 5 файлов, а файлы которые были в "Новой папке" не скопировались вообще
0
sov44
1760 / 744 / 128
Регистрация: 09.04.2011
Сообщений: 1,314
16.10.2012, 23:25 12
Dimonsky, попробуйте заменить
Bash
1
for /f "delims=" %%B in ('dir /b/s/ad "%UserProfile%\Рабочий стол\*" ^|find "Данные"') do copy /y "%%B\*" %USB%
на
Bash
1
for /f "delims=" %%B in ('dir /b/ad "%UserProfile%\Рабочий стол\*" ^|find "Данные"') do xcopy /e/y/h "%UserProfile%\Рабочий стол\%%B" "%USB%\"
1
Dimonsky
3 / 3 / 0
Регистрация: 14.10.2012
Сообщений: 18
17.10.2012, 09:00  [ТС] 13
Конструкция без /s на основе

Bash
1
for /f "delims=" %%B in ('dir /b/ad "%UserProfile%\Рабочий стол\*" ^|find "Данные"') do xcopy /e /y /h "%%B\*" %USB%
работает как надо

Спасибо
0
Dimonsky
3 / 3 / 0
Регистрация: 14.10.2012
Сообщений: 18
26.10.2012, 21:55  [ТС] 14
На будущее еще хотелось бы узнать, если эта флэшка подохнет, есть еще одна которая определяется как два диска, K (FAT32) и L (Неизвестная файловая система), как модифицировать конструкцию, чтоб она с этими двумя дисками работала
0
Dragokas
Эксперт WindowsАвтор FAQ
17058 / 7113 / 861
Регистрация: 25.12.2011
Сообщений: 10,924
Записей в блоге: 16
26.10.2012, 23:26 15
Что именно требуется - паралельная запись в оба раздела?

Скрипт определяет имя хотя бы одного раздела этой флешки?

Прикрепите, пожалуйста, файл c:\Drives.txt, который будет создан при выполнении скрипта:

Bash
1
wmic logicaldisk get name, drivetype, mediatype> c:\Drives.txt
0
Dimonsky
3 / 3 / 0
Регистрация: 14.10.2012
Сообщений: 18
27.10.2012, 10:47  [ТС] 16
Запись необходима только в один раздел K (FAT32). Предыдущая конструкция которая прекрасно работает с флэшкой (которая определяется как один диск) - с этой флэшкой (которая определяется как два) перебрав диски F G K L, пытается записать данные на диск L (Неизвестная файловая система), в который ничего не записывается (F и G это кардридеры SD / MMC и MemoryStick - они пустые без карт и не используются)
0
Миниатюры
Копирование на флешку папки, имя которой меняется  
Вложения
Тип файла: txt Drives.txt (542 байт, 11 просмотров)
Dragokas
Эксперт WindowsАвтор FAQ
17058 / 7113 / 861
Регистрация: 25.12.2011
Сообщений: 10,924
Записей в блоге: 16
28.10.2012, 04:06 17
Попробуйте так:

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@echo off
setlocal EnableDelayedExpansion
 
:: Определяем букву первой флешки (на которой присутствует файловая система)
For /F "Tokens=2 Delims==" %%A In ('WMIC LogicalDisk Where ^(DriveType^=2 And MediaType^=NULL^) Get Name /Value') Do (
  if exist %%A\ (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
1
Dimonsky
3 / 3 / 0
Регистрация: 14.10.2012
Сообщений: 18
28.10.2012, 16:32  [ТС] 18
Чет не работает
0
Миниатюры
Копирование на флешку папки, имя которой меняется  
Dragokas
Эксперт WindowsАвтор FAQ
17058 / 7113 / 861
Регистрация: 25.12.2011
Сообщений: 10,924
Записей в блоге: 16
31.10.2012, 04:45 19
Попробовал на работе - ох уж капризные эти кард-ридеры.
На другой материнке, кстати, у меня не отображаются пустые разделы.

Вот так можно безопасно отфильтровать "не готовые" драйвы кард-ридера:

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@echo off
setlocal EnableDelayedExpansion
 
:: Определяем букву первого раздела флешки
:: Исключаем устройства с пометкой "не готово" (например, кард-ридеры)
For /F "Tokens=2 Delims==" %%A In ('WMIC LogicalDisk Where ^(DriveType^=2 And MediaType^=NULL^) Get Name /Value') Do (
  fsutil fsinfo volumeinfo %%A\ |>nul Find /i "%%A" && (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
Не успел испытать. Попробуйте.

Добавлено через 36 минут
Можно еще через ...
Where "VolumeSerialNumber Is Not Null"
Win32_LogicalDisk class

но я пока не могу с синтаксисом подружиться, чтобы объединить все в один запрос,
в крайнем случае можно подзапросом.
1
Dimonsky
3 / 3 / 0
Регистрация: 14.10.2012
Сообщений: 18
31.10.2012, 09:27  [ТС] 20
Тоже чет не работает к сожалению
0
Миниатюры
Копирование на флешку папки, имя которой меняется  
31.10.2012, 09:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.10.2012, 09:27

Копирование папки с заменой имени (имя папки - дата)
например мне нужно скопировать все с флешки и вставить в папку C:\Backup . Но чтобы каждый раз...

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

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


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

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

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