如何解决移动最后一个文件夹的文件时带有重音字符的文件名问题?
How to solve issues with file names with characters with accents on moving last folder's files?
我需要将许多文件夹中的最后 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
它正在运行,但存在一些问题。
长folder/filename破解脚本我有a cannot find the specified path
.
有时它会在目标文件夹中移动包含所有文件的子文件夹。
有时脚本会跳出主文件夹并尝试处理另一个主文件夹。
我也有一些口音和特殊字符问题。 chcp 850
转换 '
中的一些重音 é
并用 cannot find the specified path
.
打破脚本
我尝试了 chcp 1252
但是在 úó
中转换了所有控制台口音 éà
并且没有解决 '
中转换的 é
和 cannot find the specified path
问题。
我尝试将脚本保存为 ANSI、UTF-8、不带 BOM 的 UTF-8,但对这个问题没有任何影响。
要解决所有这些问题,需要更改批处理代码中的哪些内容?
没有困难的明确例子,我们就沦为理论。
改变
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
,这应该可以解决重音问题。
我需要将许多文件夹中的最后 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
它正在运行,但存在一些问题。
长folder/filename破解脚本我有
a cannot find the specified path
.有时它会在目标文件夹中移动包含所有文件的子文件夹。
有时脚本会跳出主文件夹并尝试处理另一个主文件夹。
我也有一些口音和特殊字符问题。
chcp 850
转换'
中的一些重音é
并用cannot find the specified path
. 打破脚本
我尝试了 chcp 1252
但是在 úó
中转换了所有控制台口音 éà
并且没有解决 '
中转换的 é
和 cannot find the specified path
问题。
我尝试将脚本保存为 ANSI、UTF-8、不带 BOM 的 UTF-8,但对这个问题没有任何影响。
要解决所有这些问题,需要更改批处理代码中的哪些内容?
没有困难的明确例子,我们就沦为理论。
改变
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
,这应该可以解决重音问题。