Batch file 如何根据文件名将文件名排序到文件夹中
我正在尝试根据文件名的开头将文件移动到文件夹中 例如,我有六个文件,xx_0_1.png,xx_0_2.png,xx_1_1.png,xxx_0_1.png,xxx_0_2.png,xxx_1_1.png (他们并不总是遵循三人一组的模式) 我需要它们根据_0之前的字符排序到文件夹中(因为可能有类似hello_world_0_1.png的东西,名称从不包含整数。后面的数字没有大小限制 所以如果我有fruit_0_1.png,fruit_0_2.png,fruit_1.png,fence_0_1.png,fence_0_2.png,hello_world_0_1.png和hello_world_0_2.png,它们会像这样排序到文件夹中: 果Batch file 如何根据文件名将文件名排序到文件夹中,batch-file,Batch File,我正在尝试根据文件名的开头将文件移动到文件夹中 例如,我有六个文件,xx_0_1.png,xx_0_2.png,xx_1_1.png,xxx_0_1.png,xxx_0_2.png,xxx_1_1.png (他们并不总是遵循三人一组的模式) 我需要它们根据_0之前的字符排序到文件夹中(因为可能有类似hello_world_0_1.png的东西,名称从不包含整数。后面的数字没有大小限制 所以如果我有fruit_0_1.png,fruit_0_2.png,fruit_1.png,fence_0_1.
- 水果0_1.png
- 水果0_2.png
- 水果1.png
- 围栏_0_1.png
- 围栏0_2.png
- 你好(世界)(0)(1.png)
- 你好(world_0_2.png)
@echo off
for %%a in (*.*) do (
md "%%~na" 2>nul
move "%%a" "%%~na"
)
cd ..
del %%~na
pause
它当前将每个文件放入各自的文件夹中,而不是在名称后拆分。下面是一个示例脚本: (“*.*.\u*..png”)中%%F的
@(集合“oF=%F”
SetLocal EnableDelayedExpansion
对于%%D In(“!oF:\!\…\”)Do@(设置“oD=%%~dpnD”
设置“oD=!oD:%\uuuuu CD%=!”
机器人复制。“!oD:\=\!”%%F”/Mov>NUL)
(本地)
由于您的问题只是一个代码请求,我不打算解释它是如何工作的,如何使用它,也不打算在发布时对您问题之外的任何场景进行扩展。以下是一个可能的解决方案:
@echo关闭
setlocal EnableExtensions EnableDelayedExpansion
对于('2^>nul set“$ITEM[”)中的%%V,请设置“%%V=”
cd/D“C:\Projects”&rem/(在此处指定目标rooot目录)
对于/F“delims=”%%F in('
dir/B/A:-D-H-S“*.*.*.png”^ findstr/I/R“[^.].[0-9][0-9]*.[0-9][0-9]*\.png$”
""做"(
调用:子“%%~nF”
在(0,1,!IDX!)中为/L%%I设置/A“IDX-=2”&设置“NAME=”&设置“NAME=!NAME!!$ITEM[%I]!”
ECHO mkdir“%%~dpF!名称:~1,-1!”2>nul
回显移动“%%~fF”“%%~dpF!名称:~1,-1!\%%~nxF”
)
端部
退出/B
:SUB
set/A“IDX=0”&set“FILE=%~1”
设置“$ITEM[!IDX!]=%文件:”&set/A“IDX+=1”&set“$ITEM[!IDX!]=%
退出/B
在测试了正确的输出后,删除大写的
ECHO
命令!好的,我尝试了其他堆栈溢出帖子中的一些示例,但都没有成功,我得到的最接近的结果是将每个文件分别排序到它们自己的文件夹中(这不是我想要的),这个例子就是我的例子:@echo off for%%a in(*.*)do(md“%%~na”2>nul move“%%a”“%%~na”)cd..del%%~na pause
它当前将每个文件放入各自的文件夹中,而不是在名称后拆分。请回答问题并将代码放在那里!除了代码很难在注释中读取之外,它们可能在将来的某个时候被清理掉,留下一个不完整的线程,因此请确保每个相关信息都被删除ecomes添加到帖子本身!