[CMD] Cобрать (move) или скопировать (copy) файлы в одну папку

monowar

Постоянный участник
Сообщения
347
Реакции
482
Всех приветствую и поздравляю с прошедшими праздниками !!!
Появилась задача собрать ( move) или скопировать ( copy) файлы в одну папку из папки ( или папок) содержащую подпапки по маске *а*.* ,где а - один-три символа в названии ( текст или числа) и любое расширение.
Вот получилось,но не работает
for /f "tokens=*" %%a in ('Dir *<search>*') Do move "%%a" C:\Temp
 
Последнее редактирование:
Не-рекурсивно:
CMD/BATCH:
@echo off
SetLocal EnableExtensions

set source=c:\temp\subf
set dest=c:\temp\dest

if not exist "%dest%" md "%dest%"

for /f "delims=" %%a in ('dir /b /ad "%source%\???.*"') do copy /y "%source%\%%~a" "%dest%\"

pause

Рекурсивно:
CMD/BATCH:
@echo off
SetLocal EnableExtensions

set source=c:\temp\subf
set dest=c:\temp\dest

if not exist "%dest%" md "%dest%"

for /f "delims=" %%a in ('dir /b /ad /s "%source%\???.*"') do copy /y "%%~a" "%dest%\"

pause
 
@Dragokas, такой вопрос - ты применил команду delims это вроде разделитель , он разделяет название файла на символы ? А команда tokens это элементы ,т.е. набор символов от пробеле до пробела ? В этих командах я плаваю (як кур во щах :Biggrin: )
 
ты применил команду delims это вроде разделитель , он разделяет название файла на символы ?
"delims=" - пустой разделитель, т.е. запрет разделять название на отдельные токены. Всё попадёт сразу в первый.

А команда tokens это элементы ,т.е. набор символов от пробеле до пробела ?
Это уже смотря какие разделители выше ты задашь (по умолчанию, это пробел и знак табуляции).
В tokens ты перечисляешь номера (по умолчанию, tokens=1). Номера обозначают порядковый номер кусочка (те кусочки, что получились после дробления текста разделителями). Tokens говорит, говорит какой кусочек в какой токен %% попадёт. Начальный токен в примере выше %%a.

Т.е. если например, задашь в for - tokens=1,3 и %%c, то в %%c попадёт кусочек №1, а в %%d попадёт кусочек №3. Но это если delims не пустой (т.е. опущен, или задан свой), иначе дробления не будет.

Другой пример:
Код:
for /f "tokens=2*" %%a in ("AA BB CC DD") do echo %%a
в %%a попадёт 2-й токен (значение = BB),
в %%b попадёт 3 + все остальные токены (значение = CC DD)
Регистр символа токена имеет значение.

Ещё есть eol= (по умолчанию, точка с запятой). Символ начала строки, которая будет опущена при чтении.

Подробнее в статье: https://safezone.cc/threads/cmd-ciklicheskie-operacii-i-primery-komanda-for.27784/

PS. tokens=* это равносильно "delims="
 
Последнее редактирование:
Назад
Сверху Снизу