манипулировать массой более 1000 изображений - PullRequest
1 голос
/ 03 апреля 2011

Привет всем, я буду рад получить некоторую помощь с файлом пакетного сценария Windows для работы с изображениями, я мигрирую со старого программного обеспечения, он использовался для сохранения файлов в папке, и каждый файл имел свой собственный идентификатор пользователя (например, 10050.jpg) У меня около 1000 таких изображений, я хотел бы распространить изображения в новую папку с именем изображения и создать файл SQL для обновления нового программного обеспечения, например:

10050.jpg, 10051.jpg, 10052a.jpg, 10052b.jpg

Перейдет по адресу:

/root/10050/10050.jpg
/root/10051/10051.jpg
/root/10052/10052a.jpg
/root/10052/10052b.jpg

И создан файл SQL:

update users set user_img = 10050/10050.jpg where user_id = 10050;
update users set user_img = 10051/10051.jpg where user_id = 10051;
update users set user_img_a = 10052/10052a.jpg where user_id = 10052;
update users set user_img_b = 10052/10052b.jpg where user_id = 10052;

Может кто-нибудь помочь мне написать командный файл для извлечения этой информации?Я начинающий в этом вопросе.Спасибо!

Ответы [ 2 ]

2 голосов
/ 03 апреля 2011

Учитывая, что идентификаторы в именах файлов всегда состоят из 5 цифр, алгоритм может выглядеть следующим образом:

  1. Возьмите файл в старом месте.

  2. Извлечение первых 5 символов из имени файла в качестве идентификатора соответствующего пользователя.

  3. Если по новому корневому пути нет соответствующей подпапки, создайте ее.

  4. Скопируйте файл в новое место.

  5. Добавьте соответствующую строку сценария SQL в файл сценария SQL.

  6. Повторите шаги 1..5 для всех соответствующих файлов.

А вот моя попытка реализации:

SETLOCAL

SET "oldroot=X:\originalpath"
SET "newroot=Y:\newrootfolder"
SET "sqlscript=Z:\path\to\script.sql"

FOR %%F IN (%oldroot%\*.jpg) DO CALL :process "%%F"

ENDLOCAL
GOTO :EOF

:process
SET filename=%~nx1
SET userid=%filename:~0,5%

IF NOT EXIST "%newroot%\%userid%\" MKDIR "%newroot%\%userid%"
COPY %1 "%newroot%\%userid%"

>>%sqlscript% ECHO update users set user_img = '%userid%\%filename%' where user_id = %userid%
1 голос
/ 03 апреля 2011

Если у вас есть выбор, вот Ruby для Windows скрипт

require 'fileutils'
root="C:\\root"
o = File.open("sql.txt","w")
Dir["*.jpg"].each do| jpg|
    dirname = jpg.scan(/^(\d+)/)[0].first # get the nbumber
    Dir.mkdir(dirname) if not Dir.exists?(dirname) #make directory
    FileUtils.copy( jpg , root + "\\"+dirname) #copy / move
    o.write( "update users set user_img = #{dirname}/#{jpg} where user_id = #{dirname}\n" ); #create sql
end
o.close

Я не знаю, почему вы используете синтаксис * nix, когда находитесь в Windows, но измените переменную root соответственно, как считаете нужным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...