【问题标题】:How to solve issues with file names with characters with accents on moving last folder's files?如何解决在移动最后一个文件夹的文件时带有重音字符的文件名问题?
【发布时间】: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

它正在工作,但存在一些问题。

  1. 长文件夹/文件名破坏了脚本,我有a cannot find the specified path

  2. 有时它会在目标文件夹中移动包含所有文件的子文件夹。

  3. 其他时候脚本会跳出主文件夹并尝试处理另一个主文件夹。

  4. 我也有一些口音和特殊字符的问题。 chcp 850' 中转换一些重音符号é 并用cannot find the specified path 中断脚本。

我尝试了chcp 1252,但是将所有控制台重音符号éà 转换为úó 并没有解决é 转换为'cannot find the specified path 的问题。
我尝试将脚本保存在没有 BOM 的 ANSI、UTF-8、UTF-8 中,对此问题没有任何影响。

要解决所有这些问题,需要在批处理代码中进行哪些更改?

【问题讨论】:

  • 感谢 Mofi 为我的问题提供的更正和精确性。

标签: batch-file diacritics


【解决方案1】:

如果没有明确的困难示例,我们就会沦为理论。

改变

cd..

cd %CD%

它将被for开头的当前目录名替换,因此生成的目录将是显式的。

改变

FOR /F "delims=" %%z IN ('dir /s /b /o-n') DO (

FOR /F "delims=" %%z IN ('dir /a-d /b /o-n') DO (

如果目录扫描遇到目录名 (/a-d) - 删除 /s 会删除子目录扫描 - 我不知道这是否是一个问题。

改变

    move "%%z" C:\Target_Folder

    move "%%~sz" C:\Target_Folder

使用短名称执行move,这应该可以克服重音问题。

【讨论】:

  • 非常感谢,这解决了我的大部分问题,除了在 ' 中解释的 é。奇怪的是,如果用新的 é 替换 é 就可以了??
猜你喜欢
  • 2021-04-10
  • 2019-08-20
  • 1970-01-01
  • 1970-01-01
  • 2021-08-28
  • 1970-01-01
  • 2014-01-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多