1

大家好,我很高兴得到一些关于处理图像的 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 文件:

更新用户设置 user_img = 10050/10050.jpg 其中 user_id = 10050;
更新用户设置 user_img = 10051/10051.jpg 其中 user_id = 10051;
更新用户设置 user_img_a = 10052/10052a.jpg 其中 user_id = 10052;
更新用户设置 user_img_b = 10052/10052b.jpg 其中 user_id = 10052;

谁能帮我写一个批处理文件来提取这些信息?我是这方面的初学者。谢谢!

4

2 回答 2

2

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

  1. 在旧位置获取文件。

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

  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%
于 2011-04-03T15:01:56.563 回答
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根据需要相应地更改变量。

于 2011-04-03T10:57:25.103 回答