【问题标题】:Need help fo finish Batch script?需要帮助来完成批处理脚本?
【发布时间】:2012-02-08 02:06:45
【问题描述】:

我将不胜感激如何开始或任何帮助。

我刚刚发现有一个工具“ImageMagick”可以通过命令行自动调整图像大小。基于这些知识,我认为执行以下操作更明智:

文件夹结构:

  1. C:\TEST --> 子文件夹 --> 导入、导出
  2. import --> subfolders --> 我们不知道文件夹的确切名称,它可以是任何东西!
  3. 导出 --> 子文件夹 --> 来自“导入”的文件

当我将“X”个文件夹(每个文件夹包含“X”张图片)放入“导入”时,我想:

  1. 将“导入”中的第一个“X”文件夹(以及其中的所有图像)复制到“导出”-> 调整为 400x300 像素并重命名为“1a”

  2. 将“import”中的第一个“X”文件夹(以及其中的所有图像)复制到“export”-> 调整为 200x150px 并重命名为“1b”

    *。假设先复制了十张图片 “导出”中的“X”文件夹... 它看起来像这样 - 1a,1b, 2a,2b, 3a,3b ... 10a,10b

当完成第一个'X'文件夹时...重新开始,直到它到达'import'中'X'文件夹的末尾。


示例#:这只是一个假设,文件和文件夹的名称和数量我们不知道!

文件夹结构:

  1. C:\TEST --> 子文件夹 --> 导入、导出
  2. import --> 子文件夹 --> f1, e7, DD --> 我们有三个文件夹
  3. 导出 --> 子文件夹 --> f1, e7, DD

    1. 将 'C:\TEST\import\f1' 中的所有图片大小调整为 'C:\TEST\export\f1\1a'
    2. 将 'C:\TEST\import\f1' 中的所有图片大小调整为 'C:\TEST\export\f1\1b'

    3. 将 'C:\TEST\import\e7' 中的所有图片大小调整为 'C:\TEST\export\e7\1a'

    4. 将 'C:\TEST\import\e7' 中的所有图片大小调整为 'C:\TEST\export\e7\1b'

    5. 将 'C:\TEST\import\DD' 中的所有图片大小调整为 'C:\TEST\export\DD\1a'

    6. 将 'C:\TEST\import\DD' 中的所有图片大小调整为 'C:\TEST\export\DD\1b'

ImageMagick 用于在命令行中调整大小的语法:

mogrify -resize 400x300 源文件

mogrify -resize 400x300 C:\picture_name.jpg

我在他们的网站http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=16486 上找到了批处理脚本,也许它可以提供帮助。

【问题讨论】:

    标签: windows-xp batch-file


    【解决方案1】:

    当然。以下是如何编写批处理脚本来完成您需要完成的事情(在 Python 中): 将其保存为 runMogrify.py

    import os
    import string
    import fnmatch
    
    source = "c:\\TEST\\import"
    target = "c:\\TEST\\export"
    
    def mogrify(parmSource, parmTarget):
        mkdirList = []
        copyList = []
        mogrifyList = []
    
        mkdirList.append('mkdir "' + parmTarget + '"')
    
        for dirpath, dirnames, filenames in os.walk (parmSource):
            # print dirpath, dirnames, filenames
            for (index,file) in enumerate(sorted(filenames)):
                if fnmatch.fnmatch(file.lower(), '*.jpg') or \
                   fnmatch.fnmatch(file.lower(), '*.gif') or \
                   fnmatch.fnmatch(file.lower(), '*.bmp'):
                    sourceFDirPathFile = dirpath + "\\" + file
    
                    targetFDirPath     = os.path.join (parmTarget, dirpath[1+len (parmSource):])
                    targetADirPathFile = targetFDirPath + "\\" + str(index+1) + "a" + os.path.splitext(file)[1]
                    targetBDirPathFile = targetFDirPath + "\\" + str(index+1) + "b" + os.path.splitext(file)[1]
    
                    if 'mkdir "' + targetFDirPath + '"' not in mkdirList:
                        mkdirList.append('mkdir "' + targetFDirPath + '"')
    
                    copyList.append('copy "' + sourceFDirPathFile + '" "' + targetADirPathFile + '"')
                    copyList.append('copy "' + sourceFDirPathFile + '" "' + targetBDirPathFile + '"')
    
                    mogrifyList.append('mogrify -resize 400x300 "' + targetADirPathFile + '"')
                    mogrifyList.append('mogrify -resize 200x150 "' + targetBDirPathFile + '"')
    
        return mkdirList, copyList, mogrifyList
    
    def main():
        mkdirList, copyList, mogrifyList = mogrify(source, target)
    
        f = open('RUNMOGRIFY.BAT', 'w')
        f.writelines( list("%s\n" % item for item in mkdirList  ) )
        f.writelines( list("%s\n" % item for item in copyList   ) )
        f.writelines( list("%s\n" % item for item in mogrifyList) )
        f.close()
    
    if __name__=="__main__": main()
    

    而且,这是我运行上面的 Python 脚本后生成的批处理文件 (RUNMOGRIFY.BAT)
    在与您类似的测试目录上:

    mkdir "c:\TEST\export"
    mkdir "c:\TEST\export\folder1"
    mkdir "c:\TEST\export\folder2"
    mkdir "c:\TEST\export\folder3"
    copy "c:\TEST\import\folder1\a.jpg" "c:\TEST\export\folder1\1a.jpg"
    copy "c:\TEST\import\folder1\a.jpg" "c:\TEST\export\folder1\1b.jpg"
    copy "c:\TEST\import\folder1\b.jpg" "c:\TEST\export\folder1\2a.jpg"
    copy "c:\TEST\import\folder1\b.jpg" "c:\TEST\export\folder1\2b.jpg"
    copy "c:\TEST\import\folder1\c.jpg" "c:\TEST\export\folder1\3a.jpg"
    copy "c:\TEST\import\folder1\c.jpg" "c:\TEST\export\folder1\3b.jpg"
    copy "c:\TEST\import\folder2\a.jpg" "c:\TEST\export\folder2\1a.jpg"
    copy "c:\TEST\import\folder2\a.jpg" "c:\TEST\export\folder2\1b.jpg"
    copy "c:\TEST\import\folder2\b.jpg" "c:\TEST\export\folder2\2a.jpg"
    copy "c:\TEST\import\folder2\b.jpg" "c:\TEST\export\folder2\2b.jpg"
    copy "c:\TEST\import\folder2\c.jpg" "c:\TEST\export\folder2\3a.jpg"
    copy "c:\TEST\import\folder2\c.jpg" "c:\TEST\export\folder2\3b.jpg"
    copy "c:\TEST\import\folder3\a.jpg" "c:\TEST\export\folder3\1a.jpg"
    copy "c:\TEST\import\folder3\a.jpg" "c:\TEST\export\folder3\1b.jpg"
    copy "c:\TEST\import\folder3\b.jpg" "c:\TEST\export\folder3\2a.jpg"
    copy "c:\TEST\import\folder3\b.jpg" "c:\TEST\export\folder3\2b.jpg"
    copy "c:\TEST\import\folder3\c.jpg" "c:\TEST\export\folder3\3a.jpg"
    copy "c:\TEST\import\folder3\c.jpg" "c:\TEST\export\folder3\3b.jpg"
    mogrify -resize 400x300 "c:\TEST\export\folder1\1a.jpg"
    mogrify -resize 200x150 "c:\TEST\export\folder1\1b.jpg"
    mogrify -resize 400x300 "c:\TEST\export\folder1\2a.jpg"
    mogrify -resize 200x150 "c:\TEST\export\folder1\2b.jpg"
    mogrify -resize 400x300 "c:\TEST\export\folder1\3a.jpg"
    mogrify -resize 200x150 "c:\TEST\export\folder1\3b.jpg"
    mogrify -resize 400x300 "c:\TEST\export\folder2\1a.jpg"
    mogrify -resize 200x150 "c:\TEST\export\folder2\1b.jpg"
    mogrify -resize 400x300 "c:\TEST\export\folder2\2a.jpg"
    mogrify -resize 200x150 "c:\TEST\export\folder2\2b.jpg"
    mogrify -resize 400x300 "c:\TEST\export\folder2\3a.jpg"
    mogrify -resize 200x150 "c:\TEST\export\folder2\3b.jpg"
    mogrify -resize 400x300 "c:\TEST\export\folder3\1a.jpg"
    mogrify -resize 200x150 "c:\TEST\export\folder3\1b.jpg"
    mogrify -resize 400x300 "c:\TEST\export\folder3\2a.jpg"
    mogrify -resize 200x150 "c:\TEST\export\folder3\2b.jpg"
    mogrify -resize 400x300 "c:\TEST\export\folder3\3a.jpg"
    mogrify -resize 200x150 "c:\TEST\export\folder3\3b.jpg"
    

    【讨论】:

    • 另外,您的文件的扩展名是什么(如果导入子文件夹中不存在 *.jpg 文件,则不会为空的导入子文件夹创建导出文件夹层次结构)
    • 将其改回 c:\\TEST\\import 和 C:\\TEST\\export。导入的子文件夹中是否有 jpg 文件?您的导入文件夹树是什么样的?
    • 当我运行 MOGRIFY.BAT 来处理图像时......循环无限期地继续......直到我按 ctrl+c 停止。
    • 导入文件夹树:folderX,folderX,folderX........在每个'folderX'中都是'X'个jpg,bmp或gif图像。以下是它的外观 完成“导出”文件夹树:“export” -> “folderX -> 1a.jpg, 1b.jpg...2a.JPG, 2b.JPG...3a.gif,3b.gif.. ....Xa.jpg,Xb.jpg"...下一个目录.."文件夹X -> 1a.jpg, 1b.jpg...2a.bmp, 2b.bmp...3a.GIF,3b.GIF ......Xa.jpg,Xb.jpg" ....等等。 “导入”中的每张图片都调整为 1a.extension 和 1b.extension(jpg、gif 或 bmp)....如果“导入”中存在某些 xxx.jpg 图片,它将看起来像 1a.jpg 和 1b.jpg。每张图片都保留其扩展名。希望我解释得很好?
    • 这里的所有成员中,只有你和 Aacini....尤其是你已经尝试过真正的帮助!祝你一切顺利,即使你没有找到解决办法。我认为这个问题并不像我描述的那样复杂。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多