返回列表 发帖

[文件操作] [已解决]批处理归类文件会将文件夹移动出来的问题

for /r %%a in (*) do call :MvFile "%%~a"
pause
exit
:MvFile
if "%~f1"=="%~f0" goto :eof
set "Str=%~n1"
if not exist "%Str:~0,3%" md "%Str:~0,3%"
move "%~1" "%Str:~0,3%\"
goto :eof COPY
代码如上,for 加上 /r 后便可对子目录里的文件进行处理,但是在处理完后会将创建的文件夹移动出来,请问如何解决? 使其子文件夹里处理后的文件夹不被移动出来?
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

回复 5# aloha20200628


    感谢大哥,是我要的效果!

TOP

本帖最后由 aloha20200628 于 2025-3-16 19:36 编辑

回复 3# a6236130

试试以下代码, 猜测楼主想要这个效果吧...
@echo off &for /f "delims=" %%F in ('dir /b/s/a-d') do if /i "%~f0" neq "%%F" (
    set "nF=%%~nF" &setlocal enabledelayedexpansion &md "%%~dpF!nF:~0,3!" 2>nul
    move /y "%%F" "%%~dpF!nF:~0,3!\" &endlocal)
pause&exit/bCOPY
1

评分人数

TOP

@echo off
setlocal enabledelayedexpansion
for /r %%a in (*) do (
    if not "%%a"=="%~f0" (
        set "file=%%a"
        set "folder=%%~dpa!file:~0,3!"
        if not exist "!folder!" md "!folder!"
        move "%%a" "!folder!\" >nul
    )
)
pauseCOPY

TOP

回复 2# aloha20200628


   我测试了一下 还是会被移动出来

TOP

本帖最后由 aloha20200628 于 2025-3-16 15:50 编辑

回复 1# a6236130

用 for %%F in (*) do ... 句式就可能出现这类问题,改用以下代码试试...
@echo off &for /f "delims=" %%F in ('dir /b/s/a-d') do if /i "%~f0" neq "%%F" (
   set "nF=%%~nF" &setlocal enabledelayedexpansion &md "!nF:~0,3!" 2>nul
   move /y "%%F" "!nF:~0,3!\" &endlocal)
pause&exit/bCOPY

TOP

返回列表