Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: shatun on May 04, 2022, 02:14:39 PM
-
Добрый день!
Нужно копировать файлы с определённым названием в одну папку. Перед копированием удалить все ранее сохранённые там файлы.
Например условно есть разные папки:
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 (http://crapware.aidf.org/forum/index.php?topic=4575.msg31318#msg31318) но у меня почему-то не "взлетело" подскажите пожалуйста как это лучше реализовать. В дальнейшем планирую для поиска файлов использовать переменную.
-
Да легко
$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)
Надеюсь в путях нет пробелов и русских букв.
Если будут файлы с одинаковыми именами, они перезапишутся.
-
Надеюсь в путях нет пробелов и русских букв.
Если будут файлы с одинаковыми именами, они перезапишутся.
Три раза проверил (все папки в корне диск C:)
1. Вспомнил историю на форуме как ты нашёл проблему и долго смеялся. Оказалось, что название у юзера картинки было с русскими буквами а написано по английски.
2. Файлы с одинаковыми именами, они перезапишутся. Да, да.. спасибо. Извиняюсь что не написал, именно так и нужно.
Только вот у меня файлики удаляются, а в папку IMG не переносятся (
$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 в логе..
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.
Подскажи что не так?
-
Вот же блин!!! Когда меняешь файлам имя группой, винда вставляет пробел с номером в скобках - IMG_12201_16_145647 (21)
Внёс изменения в названия файлов и они перенеслись мигом.
Жаль что файлики которые копируются тоже удаляются. Оставить их как-то можно?
Так или иначе...
Vint, снимаю шляпу!
Огромнейшее спасибо!!!
-
Жаль что файлики которые копируются тоже удаляются. Оставить их как-то можно?
Ха. Почему я упорно прочитал 'перенести', а не копировать. Сознательно так и делал.
Поменяй move на copy или xcopy
-
Понял, спасибо.
-
например 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. так что ли. Надеюсь не ошибся. Не проверял.
$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), ")")
-
Вот почему. Основное задание здесь, его и перечитывал несколько раз. А здесь сказано перенести.
Извиняюсь. Действительно в названии написал одно, а описал коряво. Что тут сказать - нужно мне подучиться ставить задачи.
Если надо, чтоб работало с пробелами, нужно добавить кавычек, чтоб в итоге запрос получился такой
Вообще супер!
Признаться есть такая сложность с пробелами да и с русскими названиями тоже ((
Если потребуется все эти файлики перенести на телефон то в путях будут пробелы и русские буквы.
Вот например как выглядит путь если расшарить телефон (поставить в режиме работы USB) передачу файлов:
Этот компьютер\SKR-H0\Внутренний общий накопитель\DCIM\Camera
Тут и русские буквы и пробелы присутствуют ((
думал попытаться решить это изменением названия и укоротить путь.
Типа SKR-H0\USB\DCIM
не знаю получиться или нет
-
Проверил код с пробелами как файлы так и путь
Даже попробовал создать папку с русскими буквами и пробелами C:\тест с пробелом
Код работает!
пробовал перенести на мобильник Этот компьютер\SKR-H0\Внутренний общий накопитель\DCIM\Camera
К сожалению не переносится. Но это уже другая история и другая тема.
$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
-
Если кому понадобиться переносить файлы с мобильного или на мобильный, имейте ввиду, что этот скрипт работает, но чтобы назначить мобильнику имя диска (например - A:) без рут прав при помощи Wi Fi, можно использовать программу для андройда - WebDav сервер.
Vint, ещё раз спасибо!