使用批处理脚本组织文件

时间:2018-10-11 07:45:44

标签: windows batch-file batch-rename

我需要以某种方式将所有文件从源文件夹(包括子文件夹)复制到目标文件夹,同时将子文件夹名称保留为文件名。

在Windows上使用批处理文件。

示例:

sourceFolder\packed1.bin
sourceFolder\data1\packed1.bin
sourceFolder\data1\packed2.bin
sourceFolder\data1\zz\packed1.bin
sourceFolder\data1\aa\packed1.bin
sourceFolder\data1\aa\22\packed1.bin

应该成为...

destinationFolder\packed1.bin
destinationFolder\data1-packed1.bin
destinationFolder\data1-packed2.bin
destinationFolder\data1-zz-packed1.bin
destinationFolder\data1-aa-packed1.bin
destinationFolder\data1-aa-22-packed1.bin

我尝试使用goto,但无法跟踪我所在的目录,然后返回到该目录。

@echo off
setlocal EnableDelayedExpansion

set mypath=%cd%
set "_orig=%mypath%\datafolder"
set "_origCurr=%_orig%"
set "_dest=%mypath%\untree\"

set procDirs
set /a procDirsL=0
set currDirS=""
set /a isProc=0

:gofolders
for /d %%D in ("%_dest%\*.*") do (
set currDirS=%currDirS%\%%D
set procDirs[!procDirsL!]

set /a procDirsL=!procDirsL!+1


goto gofolders
)

:dofiles
for /f %%F in ("%_dest%\*.*") do (

)
goto gofolders

1 个答案:

答案 0 :(得分:2)

mCustomscrollbar

在执行之前设置::-webkit-scrollbar@echo off setlocal rem Set target and destination paths. set "target=%cd%\sourceFolder" set "dest=%cd%\destinationFolder" rem Make dest dir if needed. if not exist "%dest%" md "%dest%" rem Recurse target and get filepath of .bin files. for /r "%target%" %%A in (*.bin) do call :moveToDest %%A exit /b :moveToDest setlocal set "oldname=%~1" rem Remove target from the filepath. call set "newname=%%oldname:%target%=%%" if not defined newname ( >&2 echo target is undefined exit /b 1 ) rem Remove leading \. if "%newname:~,1%" == "\" set "newname=%newname:~1%" rem Replace \ with -. set "newname=%newname:\=-%" rem Copy new named file to dest. copy "%oldname%" "%dest%\%newname%" >nul if errorlevel 1 ( >&2 echo Failed to copy "%oldname%" to "%dest%\%newname%" exit /b 1 ) exit /b

将目标文件重命名并复制到 没有子文件夹结构的目标 目标文件夹仅在开始时完成一次。

目标文件夹通过target循环递归 并获取dest文件的所有完整路径。 标签for与参数一起调用 每个.bin文件的完整路径。

在标签:moveToDest中,传递了参数 设置为.bin。目标路径已删除 并在需要时加反斜杠。这设置了旧名称 作为相对于目标路径的相对路径。 反斜杠将替换为破折号以创建 复制的文件名。复制:moveToDest文件 使用oldname从目标复制到 具有新文件名的目的地。