大家好我很乐意获得有关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;
任何人都可以帮我编写批处理文件来提取此信息吗?我是这方面的初学者。谢谢!
鉴于文件名中的 ID 始终由 5 位数字组成,算法可能是这样的:
-
在旧位置获取文件。
-
从文件名中提取前导 5 个字符作为相应用户的 ID。
-
如果新根路径旁边没有相应的子文件夹,请创建它。
-
将文件复制到新位置。
-
将相应的 SQL 脚本行添加到 SQL 脚本文件中。
-
对所有相关文件重复步骤 1..5。
这是我对实现的尝试:
SETLOCAL
SET "oldroot=X:originalpath"
SET "newroot=Y:newrootfolder"
SET "sqlscript=Z:pathtoscript.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%
如果你有选择,这里有一个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
变量。