创建批处理文件,将照片从多个目录移动到该目录自己的子目录中

创建批处理文件,将照片从多个目录移动到该目录自己的子目录中

我希望有人能帮我编写一个批处理文件。

我有一个包含 800 多个目录的文件夹,每个目录都有一个照片.png和一个子目录A其中包含 3 个子目录,我需要将每个目录中的照片向下移动 2 个子目录,放入子目录 1

我对编程/脚本了解一点,但还不够,哈哈,我想应该是某种 for 循环,以递归方式查看每个目录并找到 photo.png 的每个实例,然后以某种方式将每个实例移动到子目录中

例如

> ─Parent
>     ├─────directory1
>     │         ├──sub-directoryA
>     │                  ├──sub-directory1   <──────────│        
>     │                  ├──sub-directory2              │
>     │                  ├──sub-directory3              │
>     │         photo.png <────────move this into here──│ 
>     ├─────directory2
>     │         ├──sub-directoryA
>     │                  ├──sub-directory1   <──────────│        
>     │                  ├──sub-directory2              │
>     │                  ├──sub-directory3              │
>     │         photo.png <────────move this into here──│ 
>     ├─────directory800
>     │         ├──sub-directoryA
>     │                  ├──sub-directory1          
>     │                  ├──sub-directory2     
>     │                  ├──sub-directory3      
>     │         photo.png 

答案1

电源外壳:

$path       = 'c:\parent'
$filter     = 'photo.png'
$DestSubDir = 'subDirectoryA\SubDirectory1'

( gci $path $filter -recurse -depth 1 ) |
    Move-Item -Destination { Join-Path $_.DirectoryName $DestSubDir }

气相色谱 移動項目 连接路径

答案2

好吧,在谷歌搜索后,我终于找到了一个解决方案,我将在这里发布以供将来参考,以防其他人想要做同样的事情。我将发布完整的脚本,然后详细说明每个部分的作用。只需将此批处理文件放在您正在工作的目录中,它就会扫描其下方的目录并移动照片,只需更改照片或目录的名称,您甚至可以更改文件扩展名并移动视频、文本文件等 :)

请记住,对于 CMD 窗口使用单个 %,对于批处理文件使用 2 个 %%

for /f "tokens=*" %%a in ('dir /b /A:D "*"') 
do (
if not exist "%%a\sub-directoryA" 
md "%%a\sub-directoryA\sub-directory1"
Echo >-------------------------------------------------------------------<

if exist "%%a\photo.jpg" echo  %%a photo.jpg found.
if exist "%%a\photo.jpg" move "%%a\photo.jpg" "%%a\sub-directoryA\sub-directory1\" >NUL
if exist "%%a\*.jpg" echo  %%a *.jpg found.
if exist "%%a\*.jpg" move "%%a\*.jpg" "%%a\sub-directoryA\sub-directory1\" >NUL
Echo:
)

Echo >-------------------------------------------------------------------<

timeout /t 5 >NUL

for /f "tokens=*" %%a in ('dir /b /A:D "*"') 

:for /f 针对一组文件循环命令

“tokens=*” 导致所有项目都被处理

%%a 是命令行参数,只是为找到的每个项目创建一个参数

('dir /b /A:D "*"')

/B- 裸格式(无标题、文件大小或摘要)

/广告- 文件属性,在本例中是文件夹

“*”- 仅表示所有文件夹

do (
if not exist "%%a\sub-directoryA" md "%%a\sub-directoryA\sub-directory1"

:检查是否存在名为 sub-directoryA 的文件夹,如果不存在则创建该文件夹以及 sub-directory1

if exist "%%a\photo.jpg" echo  %%a photo.jpg found.
if exist "%%a\photo.jpg" move "%%a\photo.jpg" "%%a\aa\artwork\" >NUL

只检查所有文件,如果找到该文件,ECHO 会在屏幕上显示消息,然后将其移动到指定文件夹

相关内容