我有一些文件,我想将它们移到以前没有创建过的字母文件夹中。使用批处理我想生成文件夹。必须在文件的第一个字母
之后将这些文件移到这些文件夹中我的目录中有一个多语言文件列表,如下所示:
中文
alfa
35h
Ĕuid
لعربية
សេវិនខ្មែរ
我尝试使用此命令将文件移动到字母文件夹中,使用第一个文件夹字母进行排序
@echo off
setlocal enabledelayedexpansion
for /d %%i in (*) do (
set first=%%i
set first=!first:~0,1!
md !first! 2>nul
if not "!first!" == "%%i" move "%%i" "!first!\%%i"
)
什么都没发生。
这部分
for /d %%i in (*) do (
创建文件夹并移动文件夹而不是文件,但我想在生成的文件夹中移动文件(我之前不想创建文件夹)
答案 0 :(得分:0)
您目前正在使用for /d
,它适用于目录,而不是文件。由于你有文件,你需要你的for循环来处理它们。如果你只是删除/d
,它就会这样做。但请注意,这意味着它还将移动批处理文件本身。如果你不想那样,那么你需要输入逻辑来排除它。像这样:
@echo off
setlocal enabledelayedexpansion
for %%i in (*) do (
set first=%%i
if not "!first!" == "%0" (
set first=!first:~0,1!
md !first! 2>nul
if not "!first!" == "%%i" move "%%i" "!first!\%%i"
)
)
编辑!支持强>
如果文件名包含感叹号,则它将不起作用,因为启用延迟扩展时,它会将其视为变量分隔符的一部分。绕过它的方法是在启用延迟扩展之前将文件名分配给变量:
@echo off
setlocal
for %%i in (*) do (
set name=%%i
setlocal enabledelayedexpansion
if not "!name!" == "%0" (
set first=!name:~0,1!
md !first! 2>nul
if not "!first!" == "!name!" move "!name!" "!first!\!name!"
)
)