操纵大量的1000多张图像

时间:2011-04-03 10:31:57

标签: file batch-file bulk file-manipulation

大家好 我很乐意帮助windows批处理脚本文件来操作图像, 我从旧软件迁移,它用于保存文件夹中的文件,每个文件都有自己的用户ID(例如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 个答案:

答案 0 :(得分:2)

鉴于文件名中的ID总是由5位数组成,算法可能是这样的:

  1. 在旧位置取一个文件。

  2. 从文件名中提取前5个字符作为相应用户的ID。

  3. 如果新的根路径没有相应的子文件夹,请创建它。

  4. 将文件复制到新位置。

  5. 将相应的SQL脚本行添加到SQL脚本文件中。

  6. 对所有相关文件重复步骤1..5。

  7. 这是我尝试实施的方法:

    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 :(得分:1)

如果您有选择,这是一个Ruby for 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

我不知道您在Windows中使用* nix目录语法的原因,但在您认为合适的情况下相应地更改了root变量。