【发布时间】:2017-11-26 12:52:45
【问题描述】:
我需要将很多文件夹中的最后 x 个文件移动到一个新文件夹
结构:
Master Folder
Subfolder_01
Subfolder_01_File_0001.xxx
Subfolder_01_File_0002.xxx
...
Subfolder_01_File_0125.xxx
Subfolder_01_File_0126.xxx
Subfolder_02
Subfolder_02_File_0001.xxx
Subfolder_02_File_0002.xxx
...
Subfolder_02_File_0356.xxx
Subfolder_02_File_0357.xxx
Subfolder_03
Subfolder_03_File_0001.xxx
Subfolder_03_File_0002.xxx
...
Subfolder_03_File_0018.xxx
Subfolder_03_File_0019.xxx
最后 2 个文件的预期结果:
Target_Folder
Subfolder_01_File_0125.xxx
Subfolder_01_File_0126.xxx
Subfolder_02_File_0356.xxx
Subfolder_02_File_0357.xxx
Subfolder_03_File_0018.xxx
Subfolder_03_File_0019.xxx
我写了这段代码:
@echo off
Rem Enable accent for French name
chcp 850
Rem Set Console text color
color 0A
Rem Get master folder
SET "SourceFolder=%~1"
cd %SourceFolder%
Rem processing all subfolders
FOR /F "delims=" %%i IN ('dir /ad-h /b') DO (
echo.
echo; Processing Folder %%i
cd %%i
call :innerloop
cd..
)
PAUSE
goto :eof
Rem get all last X (limit) files and move them to the target folder
:innerloop
setlocal
set /a "n=0, limit=2"
FOR /F "delims=" %%z IN ('dir /s /b /o-n') DO (
echo Moving File %%z
move "%%z" C:\Target_Folder
2>nul set /a "n+=1, 1/(limit-n)"||goto :break
)
goto :eof
Rem stop when "limit" is reached
:break
goto :eof
它正在工作,但存在一些问题。
长文件夹/文件名破坏了脚本,我有
a cannot find the specified path。有时它会在目标文件夹中移动包含所有文件的子文件夹。
其他时候脚本会跳出主文件夹并尝试处理另一个主文件夹。
我也有一些口音和特殊字符的问题。
chcp 850在'中转换一些重音符号é并用cannot find the specified path中断脚本。
我尝试了chcp 1252,但是将所有控制台重音符号éà 转换为úó 并没有解决é 转换为' 和cannot find the specified path 的问题。
我尝试将脚本保存在没有 BOM 的 ANSI、UTF-8、UTF-8 中,对此问题没有任何影响。
要解决所有这些问题,需要在批处理代码中进行哪些更改?
【问题讨论】:
-
感谢 Mofi 为我的问题提供的更正和精确性。
标签: batch-file diacritics