用于循环的Windows脚本

时间:2012-08-03 14:29:03

标签: windows scripting batch-file

我是Windows脚本的新手。我写了一个小批处理文件来移动大目录中的子目录和文件。

@ECHO OFF
for /f %x in ('dir /ad /b') do move %xipad %x\
for /f %x in ('dir /ad /b') do md %x\thumbs
for /f %x in ('dir /ad /b') do move %x\*thumb.png %x\thumbs\
for /f %x in ('dir /ad /b') do move %x\*thumb.jpg %x\thumbs\
for /f %x in ('dir /ad /b') do del %x\%xipad\*thumb.png
for /f %x in ('dir /ad /b') do del %x\%xipad\*thumb.jpg
for /f %x in ('dir /ad /b') do del %x\xml.php
for /f %x in ('dir /ad /b') do del %x\%xipad\xml.php

看起来我可以将所有命令放入单个“for / f%x in ...”循环中,然后在内部执行逻辑。我应该检查扩展名是.png还是.jpg(不是两个单独的命令)。做这两个动作的最佳方法是什么?另外还有其他一些我应该实现的方法来改善它吗?

2 个答案:

答案 0 :(得分:1)

只需按以下方式执行单个for循环:

for /D %%x in (*) do (
  move %%xipad %%x\
  md %%x\thumbs
  move %%x\*thumb.png %x\thumbs\
  move %%x\*thumb.jpg %x\thumbs\
  del %%x\%%xipad\*thumb.png
  del %%x\%%xipad\*thumb.jpg
  del %%x\xml.php
  del %%x\%%xipad\xml.php
)

请注意,您必须在批处理文件中为这些变量使用双倍%。当你注意到你不需要循环dir输出,因为for可以自己迭代文件和目录。

至于检查扩展程序,我有点不知所措你要检查的扩展名,具体来说。你正在迭代文件夹,但文件夹上的扩展很少有任何意义。

答案 1 :(得分:1)

PowerShell在这个例子中看起来有点冗长,但无论如何这里都是一个例子。再次,正如我在评论中提到的那样 - 如果您现在正在尝试为Windows学习脚本语言,请帮自己一个忙,学习PowerShell!

#Get the directories we're going to work with:
Get-ChildItem -Path d:\rootdirectory\ | ? {$_.PSIsContainer} | % {
    #Remove all xml.php files from current directory and current directory ipad.
    Remove-Item ($_.FullName + "\xml.php")
    #For all the files in the directory move the each "ipad" directory into the directory with the same name.
    If ($_.Name -like *ipad) {  
        #Delete all  png and jpg images with "thumb" in the name from each current directories ipad directory
        Get-ChildItem $_ -filter "*thumb* | ? {($_.Extension -eq "jpg") -or ($_.Extension -eq "png")} | % {
            Remove-Item $_
        }
        #...Then actually move the item
        Move-Item $_ -Destination $_.FullName.Replace("ipad","")}
    }
    #Use else to work on the remainder of the directories:
    else {
        #Create a directory called "thumbs" inside all of the current directories
        $thumbDir = New-Item -ItemType Directory -Path ($_.FullName + "\thumbs\")
        #Move all png and jpg files in the current directory with "thumb" in the name into the "thumbs" directory.
        Get-ChildItem $_ -filter "*thumb* | ? {($_.Extension -eq "jpg") -or ($_.Extension -eq "png")} | % {
            Move-Item $_ -Destination $thumbDir.FullName
    }
}