Author Topic: Копирование файлов с определённым названием в имени файла в другую папку  (Read 3160 times)

0 Members and 1 Guest are viewing this topic.

shatun

  • Освоившийся
  • **
  • Posts: 36
    • View Profile
Добрый день!
Нужно копировать файлы с определённым названием в одну папку. Перед копированием удалить все ранее сохранённые там файлы.
Например условно есть разные папки:
C:\Office\test\222
C:\Office\test\555
C:\Office\test\333

В которых имеются файлы с названиями типа: a611-47730.JPG, a611-77770.JPG, a611-47880.JPG,  7777-47880.JPG ну и т.д. и вот нужно все файлы в которых в названии есть например 7777 перенести в отдельную папку например C:\IMG и конечно перед переносом её почистить от всего лишнего.
В поиске долго искал, но как-то с перемещением файлов не так много тем. Нашёл что-то приближённое: http://crapware.aidf.org/forum/index.php?topic=4575.msg31318#msg31318 но у меня почему-то не "взлетело" подскажите пожалуйста как это лучше реализовать. В дальнейшем планирую для поиска файлов использовать переменную.
« Last Edit: May 04, 2022, 03:21:00 PM by shatun »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Да легко

Code: (clickermann) [Select]
$dir_in = "C:\Office\test"   //папка, где будем искать
$dir_out = "C:\IMG\"  // Куда перемещаем
$template = "7777"  // шаблон поиска

$clear = STRCONCAT("del /q ", $dir_out)
$moveto = STRCONCAT("cd ", $dir_in, " && for /f ", CHAR(34), "delims=", CHAR(34), " %i in ('dir /b /s /a-d ", $dir_in, "\*", $template, "*.JPG') do (move /y %i ", $dir_out, ")")

$cmd = STRCONCAT("/C ", $clear, " && ", $moveto)
//print($cmd)
EXECUTE("cmd.exe", $cmd)

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


shatun

  • Освоившийся
  • **
  • Posts: 36
    • View Profile
Надеюсь в путях нет пробелов и русских букв.
Если будут файлы с одинаковыми именами, они перезапишутся.
Три раза проверил (все папки в корне диск C:)
1. Вспомнил историю на форуме как ты нашёл проблему и долго смеялся. Оказалось, что название у юзера картинки было с русскими буквами  а написано по английски.
2. Файлы с одинаковыми именами, они перезапишутся. Да, да.. спасибо. Извиняюсь что не написал, именно так и нужно.

Только вот у меня файлики удаляются, а в папку IMG не переносятся (
Code: (clickermann) [Select]
$dir_in = "C:\office\test"   //папка, где будем искать
$dir_out = "C:\IMG\"  // Куда перемещаем
$template = "7777"  // шаблон поиска
 
$clear = STRCONCAT("del /q ", $dir_out)
LOGWRITE ("удалили файлы")
$moveto = STRCONCAT("cd ", $dir_in, " && for /f ", CHAR(34), "delims=", CHAR(34), " %i in ('dir /b /s /a-d ", $dir_in, "\*", $template, "*.jpg') do (move /y %i ", $dir_out, ")")
 
$cmd = STRCONCAT("/C ", $clear, " && ", $moveto)
//print($cmd)
LOGWRITE ("cmd: ", $cmd)
EXECUTE("cmd.exe", $cmd)
 
HALT

вот cmd в логе..
Code: [Select]
20:16:16 удалили файлы
20:16:16 cmd: /C del /q C:\IMG\ && cd C:\office\test && for /f "delims=" %i in ('dir /b /s /a-d C:\office\test\*7777*.jpg') do (move /y %i C:\IMG\)
Важно где будет находиться запускаемый файл?
Пробовал его размещать
C:\office\test
и
C:\office
не хочет копировать файлы. Вот пример с именем файла IMG_177777_12_145647 (17).jpg.
Подскажи что не так?
« Last Edit: May 04, 2022, 08:42:40 PM by shatun »

shatun

  • Освоившийся
  • **
  • Posts: 36
    • View Profile
Вот же блин!!! Когда меняешь файлам имя группой, винда вставляет пробел с номером в скобках - IMG_12201_16_145647 (21)
Внёс изменения в названия файлов и они перенеслись мигом.
Жаль что файлики которые копируются тоже удаляются. Оставить их как-то можно?
Так или иначе...
Vint, снимаю шляпу!
Огромнейшее спасибо!!!
« Last Edit: May 04, 2022, 08:51:30 PM by shatun »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Жаль что файлики которые копируются тоже удаляются. Оставить их как-то можно?
Ха. Почему я упорно прочитал 'перенести', а не копировать. Сознательно так и делал.
Поменяй move на copy или xcopy


shatun

  • Освоившийся
  • **
  • Posts: 36
    • View Profile

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
например 7777 перенести в отдельную папку например C:\IMG и конечно перед переносом её почистить от всего лишнего.
Вот почему. Основное задание здесь, его и перечитывал несколько раз. А здесь сказано перенести.

Если надо, чтоб работало с пробелами, нужно добавить кавычек, чтоб в итоге запрос получился такой
/C del /q C:\IMG\ && cd "C:\office\test" && for /f "delims=" %i in ('dir /b /s /a-d "C:\office\test\*7777*.jpg"') do (move /y "%i" "C:\IMG\")

P.S. так что ли. Надеюсь не ошибся. Не проверял.
Code: (clickermann) [Select]
$moveto = STRCONCAT("cd ", CHAR(34), $dir_in, CHAR(34), " && for /f ", CHAR(34), "delims=", CHAR(34), " %i in ('dir /b /s /a-d ", CHAR(34), $dir_in, "\*", $template, "*.jpg", CHAR(34), "') do (copy /y ", CHAR(34), "%i", CHAR(34), " ", CHAR(34), $dir_out, CHAR(34), ")")
« Last Edit: May 05, 2022, 08:06:35 AM by Vint »


shatun

  • Освоившийся
  • **
  • Posts: 36
    • View Profile
Quote
Вот почему. Основное задание здесь, его и перечитывал несколько раз. А здесь сказано перенести.
Извиняюсь. Действительно в названии написал одно, а описал коряво. Что тут сказать - нужно мне подучиться ставить задачи.

Quote
Если надо, чтоб работало с пробелами, нужно добавить кавычек, чтоб в итоге запрос получился такой
Вообще супер!
Признаться есть такая сложность с пробелами да и с русскими названиями тоже ((
Если потребуется все эти файлики перенести на телефон то в путях будут пробелы и русские буквы.
Вот например как выглядит путь если расшарить телефон (поставить в режиме работы USB) передачу файлов:
Этот компьютер\SKR-H0\Внутренний общий накопитель\DCIM\Camera
Тут и русские буквы и пробелы присутствуют ((
думал попытаться решить это изменением названия и укоротить путь.
Типа SKR-H0\USB\DCIM
не знаю получиться или нет
« Last Edit: May 05, 2022, 09:47:15 AM by shatun »

shatun

  • Освоившийся
  • **
  • Posts: 36
    • View Profile
Проверил код с пробелами как файлы так и путь
Даже попробовал создать папку с русскими буквами и пробелами C:\тест с пробелом
Код работает!
пробовал перенести на мобильник Этот компьютер\SKR-H0\Внутренний общий накопитель\DCIM\Camera
К сожалению не переносится. Но это уже другая история и другая тема.

Code: (clickermann) [Select]
$dir_in = "C:\office\test"   //папка, где будем искать
$dir_out = "C:\тест с пробелом"  // Куда перемещаем
$template = "7777"  // шаблон поиска
 
$clear = STRCONCAT("del /q ", $dir_out)
LOGWRITE ("удалили файлы")
$moveto = STRCONCAT("cd ", CHAR(34), $dir_in, CHAR(34), " && for /f ", CHAR(34), "delims=", CHAR(34), " %i in ('dir /b /s /a-d ", CHAR(34), $dir_in, "\*", $template, "*.jpg", CHAR(34), "') do (copy /y ", CHAR(34), "%i", CHAR(34), " ", CHAR(34), $dir_out, CHAR(34), ")")
 
$cmd = STRCONCAT("/C ", $clear, " && ", $moveto)
//print($cmd)
LOGWRITE ("cmd: ", $cmd)
EXECUTE("cmd.exe", $cmd)
 
HALT

shatun

  • Освоившийся
  • **
  • Posts: 36
    • View Profile
Если кому понадобиться переносить файлы с мобильного или на мобильный, имейте ввиду, что этот скрипт работает, но чтобы назначить мобильнику имя диска (например -  A:) без рут прав при помощи Wi Fi, можно использовать программу для андройда - WebDav сервер.
Vint, ещё раз спасибо!