我是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(不是两个单独的命令)。做这两个动作的最佳方法是什么?另外还有其他一些我应该实现的方法来改善它吗?
答案 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
}
}