Batch file 如何解决移动最后一个文件夹时带有重音符号的文件名问题';s文件?

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_

我需要移动到一个新的文件夹,从许多文件夹的最后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找不到指定的路径

  • 有时,它会在目标文件夹中移动,即包含所有文件的子文件夹

  • 其他时间,脚本跳出主文件夹并尝试处理另一个主文件夹

  • 我也有一些口音和特殊字符的问题。
    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