Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 操纵1000+的大容量;图像_File_Batch File_Bulk_File Manipulation - Fatal编程技术网

File 操纵1000+的大容量;图像

File 操纵1000+的大容量;图像,file,batch-file,bulk,file-manipulation,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/10

大家好 我很高兴能得到一些关于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 /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; 更新用户设置user\u img=10050/10050.jpg,其中user\u id=10050; 更新用户设置user\u img=10051/10051.jpg,其中user\u id=10051; 更新用户设置user\u img\u a=10052/10052a.jpg,其中user\u id=10052; 更新用户设置user\u img\u b=10052/10052b.jpg,其中user\u id=10052; 有人能帮我写一个批处理文件来提取这些信息吗? 我是这方面的初学者。
谢谢大家!

如果你有选择,这里有一个脚本


我不知道为什么在windows中使用*nix目录语法,但请根据需要相应地更改
root
变量。

鉴于文件名中的ID始终由5位数字组成,算法可能如下:

  • 在旧位置获取文件

  • 从文件名中提取前5个字符作为相应的用户id

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

  • 将文件复制到新位置

  • 将相应的SQL脚本行添加到SQL脚本文件中

  • 对所有相关文件重复步骤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%
    

    请编辑您的帖子,您的第一个列表有10053b,第二个列表有10052b,最后一个列表有两次id 10050,所以您根本不清楚您想要什么。
    id
    s是否准确(并且始终)是5个数字?我编辑了这篇文章,很抱歉造成混淆,id始终是5个数字,有时用户会有几张图片,然后是10052a.jpg和10052b.jpg谢谢,脚本看起来很复杂,然后是批处理脚本,我会尝试Ruby,让你知道。什么是nix目录?您还没有看到批处理解决方案,所以如何知道它比批处理复杂这比使用
    .cmd
    脚本所能做的任何事情都要短得多。@kurumi:将其作为问题发布,等待答案。:)我正在提供一个解决方案来回答这个问题的要求,正如OP所说的。非常好!我将SetLocal EnableDelayedExpansion添加到顶部,并将最后一行更改为附加到脚本[ECHO XXX>>%sqlscript%]中,效果非常好!非常感谢。我的意思是附加一行,谢谢你提到它,我修正了我的脚本。至于你的另一个变化,我真的很想知道为什么你会需要在这样的脚本。(我的意思是填补我关于延迟扩张的知识空白,而不是争辩。)
    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%