Batch file 如何解决移动最后一个文件夹时带有重音符号的文件名问题';s文件?
我需要移动到一个新的文件夹,从许多文件夹的最后x文件 结构:Batch file 如何解决移动最后一个文件夹时带有重音符号的文件名问题';s文件?,batch-file,diacritics,Batch File,Diacritics,我需要移动到一个新的文件夹,从许多文件夹的最后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_
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找不到指定的路径
chcp 850
在
中转换一些重音符号并用中断脚本,但找不到指定路径
chcp 1252
,但在ú
中转换所有控制台口音ê
,并且没有解决在中转换的é
问题,无法找到指定路径。
我试图将脚本保存在ANSI、UTF-8、UTF-8中而不使用BOM,但对这个问题没有任何影响
为了解决所有这些问题,批处理代码中应该修改什么?没有明确的困难示例,我们只能从理论上解决这些问题
改变
cd..
到
在
的
的开头,它将被当前目录名替换,因此结果目录将是显式的
改变
FOR /F "delims=" %%z IN ('dir /s /b /o-n') DO (
到
如果目录扫描遇到目录名(/a-d
)-删除/s
将删除子目录扫描-我不知道这是否是问题
改变
move "%%z" C:\Target_Folder
到
使用短名称执行
移动
,这应该可以克服口音问题。非常感谢,这解决了我的大部分问题,除了“in”之外。奇怪的是,如果用一个新的替换掉这个,它会起作用的??谢谢Mofi,因为它给我的问题带来了修正和精确。
FOR /F "delims=" %%z IN ('dir /a-d /b /o-n') DO (
move "%%z" C:\Target_Folder
move "%%~sz" C:\Target_Folder