因此,我在一个目录中有大量文件夹(大约 12,000 个),其中许多文件夹的前 7 个数字字符相同。我想合并前 7 个字符相同的文件夹,而无需手动浏览和搜索文件夹,因为就像我说的那样,我在同一个目录中有数千个文件夹。
我需要一个批处理文件,它本质上检查一个文件夹并检查同一目录中的文件夹是否具有相同的前 7 个数字字符,如果是,则批处理会合并所有文件夹,并根据文件夹的前 7 个数字字符命名输出文件夹。例如,假设有一个名为“1234567_国家“以及另一个标题为“1234567_Nat“以及第三个文件夹,标题为“1234567_命中“我希望将这三个文件夹及其内容合并到一个名为1234567
之后,它会转到下一个文件夹,依此类推......
更新- 这是我想到的办法,但它只合并第一个单词后面有“_”的文件夹。我试图根据前七个数字字符合并文件夹,而不管后面有什么字符。
@Echo off
pushd "C:\Users\sa27964\Desktop\Testing folder"
for /f "Tokens=1* Delims=_" %%A in (
'Dir /B /AD *_*'
) Do If Not Exist "%%A" (
Ren "%%A_%%B" "%%A"
) Else (
Move /Y "%%A_%%B\*" "%%A\"
RmDir "%%A_%%B"
)
PopD
答案1
下面的脚本应该可以满足您的要求。如果在源和目标中发现任何重复项,则将跳过源文件,并且不会删除该文件及其文件夹结构。
在其当前形式下,运行时,它只会将其“计划”的操作写入屏幕和日志文件.....但实际上不会移动/更改任何文件或文件夹。
要运行它并允许它进行移动/更改,请/L
从行尾删除robocopy.exe
。
注意:RoboCopy
包含在 Windows 7 和 10 中,因此您无需下载它。
@echo off
setlocal enabledelayedexpansion
:: Variables.
set "rootDir=C:\test\"
set "logName=RoboCopy.log"
:: Ensures %rootDir% value contains trailing slash.
if not [%rootDir:~1%] EQU [\] set "rootDir=%rootDir%\"
:: Jumps to the rootDir so that for loop will only display folder names and not the full path.
pushd %rootDir%
:: Loop through all folders located at %rootDir% and for each folder...
:: Use Robocopy.exe to MOVE(and delete original folder) contents of the folder to a new folder named with just first 7 characters of original folder, and delete the original folder.
:: Log the actions of RoboCopy to the screen and also a file called %logName% in the %rootDir% location.
for /d %%a in (*) do (
set "currentDir=%%a"
robocopy.exe "%rootDir%%%a" "%rootDir%!currentDir:~0,7!" /MOVE /E /R:3 /W:10 /V /LOG+:%rootDir%%logName% /FP /TEE /XC /XN /XO /L
)
popd
endlocal
echo.
echo The task has finished.
echo.
pause
:eof
输出日志将类似于此。
-------------------------------------------------------------------------------
ROBOCOPY :: Robust File Copy for Windows
-------------------------------------------------------------------------------
Started : Monday, 9 March 2020 10:50:39 PM
Source : C:\test\1234567_test3\
Dest : C:\test\1234567\
Files : *.*
Options : *.* /V /FP /TEE /S /E /DCOPY:DA /COPY:DAT /MOVE /XO /XN /XC /R:3 /W:10
------------------------------------------------------------------------------
2 C:\test\1234567_test3\
*EXTRA Dir -1 C:\test\1234567\dir2\
*EXTRA Dir -1 C:\test\1234567\dir3\
*EXTRA File 9 C:\test\1234567\test2.txt
newer 9 C:\test\1234567_test3\test1.txt
New File 9 C:\test\1234567_test3\test3.txt
0%
100%
1 C:\test\1234567_test3\dir1\
*EXTRA File 13 C:\test\1234567\dir1\test1dir1.txt
New File 13 C:\test\1234567_test3\dir1\test3dir1.txt
0%
100%
New Dir 1 C:\test\1234567_test3\dir4\
New File 13 C:\test\1234567_test3\dir4\test3dir4.txt
0%
100%
------------------------------------------------------------------------------
Total Copied Skipped Mismatch FAILED Extras
Dirs : 3 1 2 0 0 2
Files : 4 3 1 0 0 2
Bytes : 44 35 9 0 0 22
Times : 0:00:00 0:00:00 0:00:00 0:00:00
Speed : 11666 Bytes/sec.
Speed : 0.667 MegaBytes/min.
Ended : Monday, 9 March 2020 10:50:39 PM
示例 1
C:\test\1234567_test1\file1.txt
C:\test\1234567 test2\file2.txt
C:\test\1234567890\file3.txt
会成为...
C:\test\1234567\file1.txt
C:\test\1234567\file2.txt
C:\test\1234567\file3.txt
示例 2
C:\test\1234567_test1\file1.txt
C:\test\1234567_test2\file2.txt
C:\test\1234\file3.txt
会成为...
C:\test\1234567\file1.txt
C:\test\1234567\file2.txt
C:\test\1234\file3.txt
示例 3
C:\test\1234567_test1\file1.txt
C:\test\1234567_test2\file2.txt
C:\test\1234567_test3\file1.txt
会成为...
C:\test\1234567\file1.txt
C:\test\1234567\file2.txt
C:\test\1234567_test3\file1.txt
示例 4
C:\test\1234567_test1\file1.txt
C:\test\1234567_test2\file2.txt
C:\test\1234567_test2\sub1\file1.txt
C:\test\1234567_test3\sub1\file1.txt
C:\test\1234567_test3\sub1\file2.txt
会成为...
C:\test\1234567\file1.txt
C:\test\1234567\file2.txt
C:\test\1234567\sub1\file1.txt
C:\test\1234567_test2\sub1\file1.txt
C:\test\1234567\sub1\file2.txt