Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
12 / 13 / 2
Регистрация: 14.12.2015
Сообщений: 186

Скопировать содержимое папок, созданных за сегодня, в одну папку

28.02.2016, 14:27. Показов 4580. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Путь к данным папкам известен. В папках находятся только файлы. Сложные циклы пока не понимаю.

цикл /ф "скип7 токены=1" %%а (Дир полный путь /ад /тс) сделать (
условие %%а=%дате% Тогда сделать (
прочитать токен=4 для этого же %%а
вывести %%а
Мд новая папка
Копи полный путь\%%а\*.* куда\новая папка\

Сзади еще ошметки болтаются в виде двух строк из Dir.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.02.2016, 14:27
Ответы с готовыми решениями:

Как скопировать всё содержимое папки А в папку Б?
Как скопировать всё содержимое папки(с подпапками) А в папку Б? У меня такой скрипт, но он не копирует подпапки: xcopy /y...

Как правильно скопировать папку, содержащую несколько файлов и вложенных папок?
Для копирования файла применяют FileCopy source, destination. А как правильно скопировать папку, содержащую несколько файлов и вложенных...

Как на vbs скопировать файл из папки в папку, с русскими именами папок?
Здравствуйте. Нужно скопировать файл на vbs из папки Загрузки на диск C:\ Выдаёт ошибку "Неправильный путь."Как кирилицу в...

22
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
28.02.2016, 18:09
Интересно, а в переменной %%a, "а" в латинице или тумблер для ru-en поломался
Windows Batch file
1
2
3
4
5
6
7
8
9
10
@echo off
setlocal enabledelayedexpansion
set "in=papka_in"
set "out=papka_out"
if not exist "%out%" md "%out%"
for /f "delims=" %%a in ('dir /ad /b /s "%in%"') do (
 set "sd=%%~ta" & if "!sd:~0,-6!"=="%date%" for %%b in ("%%~a\*.*") do (
  copy /y "%%~b" "%out%\%%~nxb"
))
exit
.
0
 Аватар для ZoOoO
226 / 211 / 70
Регистрация: 09.02.2016
Сообщений: 1,040
28.02.2016, 19:02
Цитата Сообщение от alpap Посмотреть сообщение
Windows Batch file
if "!sd:~0,-6!"=="%date%"
Да вот....ПОчему у тебя это работает,а у меня не работало.Я из-за этого уже второй час думаю ,как этот скрипт написать

Добавлено через 4 минуты
Цитата Сообщение от alpap Посмотреть сообщение
%%~a
что это?)
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
28.02.2016, 20:35
Цитата Сообщение от alpap Посмотреть сообщение
Интересно, а в переменной %%a, "а" в латинице или тумблер для ru-en поломался
Google Translate
Цитата Сообщение от ZoOoO Посмотреть сообщение
%%~a
что это?)
Раскрытие значения токена с удалением обрамляющих кавычек.

Цитата Сообщение от ZoOoO Посмотреть сообщение
Да вот....ПОчему у тебя это работает,а у меня не работало.Я из-за этого уже второй час думаю ,как этот скрипт написать
Как вариант, из-за того, что на англоязычной системе по-умолчанию другой формат:
08/26/2013 04:18 AM
(да и на любой можно поменять).
Поэтому брать символы желательно слева, а не отсекать справа:
Windows Batch file
1
!sd:~,10!
Ну, еще может быть отключен расширенный режим работы команд, но такое редко.
Цитата Сообщение от alpap Посмотреть сообщение
Windows Batch file
1
2
for %%b in ("%%~a\*.*") do (
 copy /y "%%~b" "%out%\%%~nxb"
Почему бы просто не:
Windows Batch file
1
copy /y "%%~a\*" "%out%\"
0
 Аватар для ZoOoO
226 / 211 / 70
Регистрация: 09.02.2016
Сообщений: 1,040
28.02.2016, 20:55
Windows Batch file
1
2
3
4
5
6
7
8
9
10
@Hecho off
setlocal enabledelayedexpansion
set "in=papka_in"
set "out=papka_out"
if not exist "%out%" md "%out%"
for /f "delims=" %%a in ('dir /ad /b /s "%in%"') do (
 set "sd=%%~ta" & if "!sd:~0,-6!"=="%date%" for %%b in ("%%~a\*.*") do (
  copy /y "%%~b" "%out%\%%~nxb"
))
exit

Хм.Помогите разобрать все это.
1.Заносим в переменную путь к папке в которой будем искать созданные за сегодня файлы
2.заносим в переменную путь папки в которую будем копировать файлы
3.если папки куда мы будем копировать файлы не существует,то создать такую папку
4.вытаскиваем все содержимое папки и заносим его в переменную %%а.СОдержимое переменной %%a приписываем время создания файла и помещаем это все в переменную %%sd
5.Если дата совпадает с сегодняшней датой,то .....Этот цикл я не понимаю.Что это за множество такое?
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
28.02.2016, 21:03
Цитата Сообщение от ZoOoO Посмотреть сообщение
Что это за множество такое?
Какое?
0
 Аватар для ZoOoO
226 / 211 / 70
Регистрация: 09.02.2016
Сообщений: 1,040
28.02.2016, 21:05
Цитата Сообщение от ZoOoO Посмотреть сообщение
Windows Batch file
for %%b in ("%%~a\*.*") do (
 copy /y "%%~b" "%out%\%%~nxb"
вся строчка
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
28.02.2016, 21:19
Если Вы были внимательны, я уже написал об этом.
Но если объяснить в лоб, то:

Читаем все файлы (кроме скрытых/системных) из каталога %%~a.
И каждый файл поставляем во вторую строку.
0
 Аватар для ZoOoO
226 / 211 / 70
Регистрация: 09.02.2016
Сообщений: 1,040
28.02.2016, 21:27
какого еще каталога?
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
28.02.2016, 21:32
Этого:
Цитата Сообщение от ZoOoO Посмотреть сообщение
4.вытаскиваем все содержимое папки и заносим его в переменную %%а
Только Вы не совсем верно описали суть происходящего.
Windows Batch file
1
dir /ad /b /s "%in%"
Читается перечень папок (рекурсивно) в папке %in%.
Затем каждая строка (путь к папке) попадает в переменную %%a
Сколько папок, столько и раз выполняется тело цикла.
0
 Аватар для ZoOoO
226 / 211 / 70
Регистрация: 09.02.2016
Сообщений: 1,040
28.02.2016, 21:44
Ну,а что происходит во втором цикле.
ПОчему ~a, а не %%a.Я понял,что это и есть переменная первого цикла.А она разве не превратилась в set "sd=%%~ta ,то есть в переменную Sd
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
28.02.2016, 22:10
Цитата Сообщение от ZoOoO Посмотреть сообщение
ПОчему ~a, а не %%a.
Ответил еще в первый раз. Хотя в данном коде можно было обойтись просто %%a, т.к. в выводе нет кавычек.
Цитата Сообщение от ZoOoO Посмотреть сообщение
А она разве не превратилась в set "sd=%%~ta ,то есть в переменную Sd
Переменные ни во что не превращаются и значение, которые они содержат, не изменяется до тех пор, пока не встретится знак = (присвоение), и даже в этом случае переменные цикла имеют особое значение. Изменить их может только сам цикл при переходе на очередную итерацию либо его завершения (переменная уничтожается).

Еще раз: присвоение значения происходит так:
Windows Batch file
1
set переменная=значение
Windows Batch file
1
%%~ta
Если к переменной цикла применяется модификатор, то в данном месте кода такая конструкция раскрывается по правилу этого модификатора. В данном случае, отображается дата модификации файла.

Windows Batch file
1
set sd=%%~ta
Затем она присваивается переменной sd

Список модификаторов для переменной цикла можно найти в справке к команде for /?

Добавлено через 4 минуты
Следует различать переменные цикла, и обычные переменные.
Переменные цикла задаются только в конструкции самого цикла, при этом их значение раскрывается точно в таком же виде - %%a
За пределами цикла эта переменная не действует.

Обычная переменная задается через команду set и раскрывается через обрамление знаками % или ! - %a% или !a!
0
 Аватар для ZoOoO
226 / 211 / 70
Регистрация: 09.02.2016
Сообщений: 1,040
28.02.2016, 22:22
А почему переменные в кавычках?
Windows Batch file
1
2
3
4
5
6
7
8
@echo off
Setlocal EnableDelayedExpansion
set m=28.02.2016
for /f "delims=" %%a in ('dir /a:d /b') do (
set b=%%~ta
if "!b:~0,10!"=="%m%" (echo !b!)
)
pause
переменная не вывелась пока кавычки не поставил.В первый раз такое.Всегда все работало без них.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
28.02.2016, 22:38
Потому что если значение переменной окажется пустым, то команда окажется некорректной (синтаксическая ошибка). У команды if (да и у других) есть обязательные операнды. Не может быть пустого операнда.
Кроме того лексемы (части команд) обычно разбиваются пробелами. НО, если значение переменной также состоит из пробела, команда if посчитает вторую часть значения переменой (после пробела), как очередную команду, например:

Windows Batch file
1
2
3
set "a=1"
set "b=1 echo 2"
if %a%==%b% echo 3
Сравнение переменных a и b покажет ИСТИНУ, хотя они и разные,
потому что 3-я строка раскроется в:

Windows Batch file
1
if 1==1 echo 2 echo 3
и только затем выполнится. Разумеется, если бы после пробела я бы написал что-то другое вместо echo (например спецсимвол), такая команда могла бы вообще "завалить" батник.

Поэтому принято значения всегда сравнивать в кавычках,
а присваивать значение переменной преимущественно тоже всегда в кавычках (по примеру выше), чтобы избежать случайного (незаметного) концевого пробела.
1
 Аватар для ZoOoO
226 / 211 / 70
Регистрация: 09.02.2016
Сообщений: 1,040
28.02.2016, 23:32
)))
Не.ЧТо то я не то делаю.
СОздал папки,напихал в них текстовые файлы.А скрипт ничего не копирует,точнее копирует каких то два непонятных файла,которые он нашел только по ему известным путям)))
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
28.02.2016, 23:43
Пришлите все архивом, посмотрю.

Добавлено через 4 минуты
Ну а вообще, я и сам не понял в целом практической пользы, от этого скрипта.
Получается что в какую-то папку складируются все файлы из других папок, если в этих папках имеется хоть один файл с датой модификации = сегодняшней.
0
 Аватар для ZoOoO
226 / 211 / 70
Регистрация: 09.02.2016
Сообщений: 1,040
28.02.2016, 23:55
Мне в обще по фигу на его применение.Я просто хочу что то делать,что бы научиться надо практиковаться.Вот и делаю все подряд.
А что слать?
Скрипт я отсюда взял и немного под свои реалии подделал.Переменные с папками убрал,потому что сам батник запускается в папке в которой созданы папки.
Вложения
Тип файла: rar 132.rar (4.3 Кб, 5 просмотров)
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
29.02.2016, 00:01
Цитата Сообщение от ZoOoO Посмотреть сообщение
Скрипт я отсюда взял и немного под свои реалии подделал.
Под свои реалии - это копирование в корень диска C?
Ну вот какие команды я получил:

Windows Batch file
1
2
3
copy /y "gsg5\gsrg.txt" "c:\gsrg.txt"
copy /y "gsry\gsgt.txt" "c:\gsgt.txt"
copy /y "jhhf\nghmkghk.txt" "c:\nghmkghk.txt"
Вы можете увидеть тоже самое просто подставив перед copy команду echo.
(а не копирует скорее всего по тому, что на системах от Windows Vista и выше копирование в корень C защищено правами Админа)
Цитата Сообщение от ZoOoO Посмотреть сообщение
Я просто хочу что то делать,что бы научиться надо практиковаться.Вот и делаю все подряд.
Может тогда лучше сделать это в собственной теме, а то придет ТС и на всех начнет ругаться
А судя по Вашим вопросам, я бы сначала посоветовал подтянуть мат.часть по части теории циклов хотя бы на основе тех тем, что есть в шапке раздела.
1
 Аватар для ZoOoO
226 / 211 / 70
Регистрация: 09.02.2016
Сообщений: 1,040
29.02.2016, 00:37
Ну вот оно и получается
Цитата Сообщение от Dragokas Посмотреть сообщение
Переменные ни во что не превращаются и значение, которые они содержат, не изменяется до тех пор, пока не встретится знак = (присвоение), и даже в этом случае переменные цикла имеют особое значение. Изменить их может только сам цикл при переходе на очередную итерацию либо его завершения (переменная уничтожается).
Получается переменная %%а в первом цикле будет такая же,как во втором.Только для меня это значит,что в эту переменную будут занаситься все папки ,которые он найдет в первом цикле.А нам надо взять папки ,которые были созданы сегодня и забрать у них файлы.ПОлучается,условие ,тут и не работает.
Интересно,а где автор скрипта....

Я запускаю батник от администратора.

Добавлено через 29 минут
Работает)
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
29.02.2016, 00:43
Dragokas, Вы кремень!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.02.2016, 00:43
Помогаю со студенческими работами здесь

Скопировать всё содержимое скрытого раздела в папку и наоборот
Как в командной строке скопировать всё содержимое скрытого раздела (без буквы) в папку и наоборот?

Архивация и очистка определённых папок и перемещение созданных архивов в папку "Мои документы"
Добрый день, возникли трудности в написании скрипта, я почти ноль в этом, только начал изучать, помогите чайнику. А приоритет выполнения...

Скопировать определённые файлы из подкаталогов в одну папку
Возможно такое сделать? Например есть пути к файлам: пути читать из файла txt например. И все эти файлы нужно скопировать...

Копирование нескольких определённых файлов и папок в одну определённую папку
Уважаемые форумчане мне нужен скрипт копирования папок и определенных файлов. Мне нужно скопировать 3 папки расположенных в разным местах...

Копирование/перенос из многоуровневой структуры папок в одну папку с их переименованием
Доброго времени суток! Мне нужно разработать приложение(WindowsForm) на C#, но до этого момента я вообще не работал с формами, неделя...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru