wangxiaohe 发表于 2024-10-24 16:17

windows目录层级批量修改

D:\test\01\images\2020\10\123.txt
D:\test\01\images\2021\10\123.txt
D:\test\01\images\2022\10\123.txt
D:\test\01\images\2023\10\123.txt
D:\test\01\images\2024\10\123.txt

D:\test\01\10\123.txt
D:\test\01\10\123.txt
D:\test\01\10\123.txt
D:\test\01\10\123.txt
D:\test\01\10\123.txt

用什么工具可以批量的把上边的目录结构修改为下边的目录结构呢?就是删除中间的某些目录层级。

Cristy 发表于 2024-10-24 16:17

wangxiaohe 发表于 2024-10-30 09:02
批处理提示目录不为空

用这个应该没问题了
@echo off
chcp 65001 > nul
setlocal enabledelayedexpansion

for /f "tokens=1,2 delims=|" %%s in (directories.txt) do (
    set "source_dir=%%s"
    set "target_dir=%%t"

    if not exist "!target_dir!" (
      mkdir "!target_dir!"
    )
   
    robocopy "!source_dir!" "!target_dir!" /E /MOVE

    rem 检查父目录是否为空
    for %%i in ("!source_dir!") do (
      set "parent_dir=%%~dpi"
      if exist "!parent_dir!" (
            pushd "!parent_dir!" > nul
            set "is_empty_parent=1"

            rem 检查父目录是否有文件或子目录
            for /f %%f in ('dir /a /b') do (
                set "is_empty_parent=0"
                echo 父目录不为空: %%f
                rem 检查是否有隐藏文件
                if "%%~af"=="d" (
                  echo 发现父目录中的子目录: %%f
                ) else (
                  if "%%~af"=="h" (
                        echo 发现父目录中的隐藏文件: %%f
                  )
                )
            )

            popd > nul

            if "!is_empty_parent!"=="1" (
                rd /s /q "!parent_dir!" 2>nul
                echo 父目录已强制删除: "!parent_dir!"
            ) else (
                echo 父目录不为空,无法删除: "!parent_dir!"
            )
      )
    )
)

echo 移动完成。
pause

bubuding 发表于 2024-10-24 17:44

everything.exe软件。先手动创建一个D:\test\01\10文件夹。然后利用everything.exe筛选D:\test\01\images\文件夹下的所有txt文件。然后全选,人工拷贝到D:\test\01\10文件夹下

Cristy 发表于 2024-10-24 17:49

本帖最后由 Cristy 于 2024-10-24 17:50 编辑


# 用bat
```PowerShell
@echo off
setlocal

rem 源目录
set "source_dir=D:\test\01\images\2020\10"
rem 目标目录
set "target_dir=D:\test\01\10"

if not exist "!target_dir!" (
    mkdir "!target_dir!"
)

rem 移动子目录和文件
move "!source_dir!\*" "!target_dir!\"

rem 删除源目录
rd /s /q "E:\work\Kdgc"

echo 移动完成。
pause
```

zhuiyu 发表于 2024-10-24 17:54

更改目录结构后是否存在相同文件名的文件,如果存在又该如何处理,直接覆盖?

wangxiaohe 发表于 2024-10-29 09:07

bubuding 发表于 2024-10-24 10:44
everything.exe软件。先手动创建一个D:\test\01\10文件夹。然后利用everything.exe筛选D:\test\01\images\ ...

这跟我直接去目录里剪切有什么区别?剪切后复制到上上层目录,100个目录,我剪切100次。

wangxiaohe 发表于 2024-10-29 09:08

Cristy 发表于 2024-10-24 10:49

# 用bat
```PowerShell


这个一次只能修改一个目录吧,我有100个类似结构的目录呢?

Cristy 发表于 2024-10-29 09:38

wangxiaohe 发表于 2024-10-29 09:08
这个一次只能修改一个目录吧,我有100个类似结构的目录呢?

创建一个txt   directories.txt 必须这个名字
文本里面写 源目录|目标目录   用竖线隔开
https://www.helloimg.com/i/2024/10/29/67203c01dddaf.png
它会把左边目录下的所有的东西移动到右边 并删除左边目录

创建一个 bat把bat和txt放在一起
@echo offchcp 65001 > nul
setlocal enabledelayedexpansion

rem 读取目录列表并处理每个目录
for /f "tokens=1,2 delims=|" %%s in (directories.txt) do (
    set "source_dir=%%s"
    set "target_dir=%%t"

    rem 创建目标目录(如果不存在)
    if not exist "!target_dir!" (
      mkdir "!target_dir!"
    )

    rem 移动子目录和文件
    move "!source_dir!\*" "!target_dir!\"

    rem 删除源目录
    rd /s /q "!source_dir!"
)

echo 移动完成。
pause

wangxiaohe 发表于 2024-10-29 14:51

Cristy 发表于 2024-10-29 02:38
创建一个txt   directories.txt 必须这个名字
文本里面写 源目录|目标目录   用竖线隔开



https://s3.bmp.ovh/imgs/2024/10/29/5f7b95981b4a8fc1.jpg

报错了

Cristy 发表于 2024-10-29 14:59

wangxiaohe 发表于 2024-10-29 14:51
报错了
https://www.123865.com/s/XxfSVv-k8F4?提取码:CCYt

下载我的这个改directories.txt 试试

直接双击bat
页: [1] 2 3
查看完整版本: windows目录层级批量修改