目录中有一个图像列表。我想创建一个只重复所有文件的bat文件,并根据文件名在这些规则的目录中对它们进行排序,例如:
1812_1005541_5226_983_1B.tif
1812_1005541_5226_983_2B.tif
1812_1005541_5226_983_3B.tif
我希望每个结果都移到:
1812_1005541_5226_983 / 1812_1005541_5226_983_1B.tif
1812_1005541_5226_983 / 1812_1005541_5226_983_2B.tif
1812_1005541_5226_983 / 1812_1005541_5226_983_3B.tif
这意味着我想通过分隔符" _"来获取字符串的前4个部分。 这是代码,你可以建议我在这里做一个改变,以达到上述结果吗?
@echo off
setlocal enabledelayedexpansion
for %%A in (*.psd *.jpg *.tif) do (
echo file found %%A
for /f "delims=" %%B in ("%%A") do set fname=%%~nB
for /f "delims=" %%C in ("%%A") do set fextn=%%~xC
for /f "tokens=1,5 delims=_" %%D in ("!fname!") do set folname=%%D
echo folder name !folname!
if not exist "!folname!" (
echo Folder !folname! does not exist, creating
md "!folname!"
) else (
echo Folder !folname! exists
)
echo Moving file %%A to folder !folname!
move "%%A" "!folname!"
)
echo Finished
pause
提前致谢!
答案 0 :(得分:2)
你基本上只需要更改你的方法来获取文件夹(看起来有点复杂,但是没有固定标记的优点;除了最后一个之外的所有元素。所以:1812_1005541_5226_983_1B.tif
将成为{{1 }}和1812_1005541_5226_983
将成为1945_2008835_5X.tif
1945_2008835
break>1812_1005541_5226_983_1B.tif
break>1812_1005541_5226_983_2B.tif
break>1812_1005541_5226_983_3B.tif
break>1945_2008835_5X.tif
@echo off
setlocal enabledelayedexpansion
for %%A in (*.psd *.jpg *.tif) do (
echo file found %%A
for /f "delims=" %%B in ("%%A") do set fname=%%~nB
REM for /f "delims=" %%C in ("%%A") do set fextn=%%~xC
for %%D in ("X:!fname:_=\!") do set folname=%%~pD
set "folname=!folname:\=_!"
set "folname=!folname:~1,-1!"
echo folder name !folname!
if not exist "!folname!" (
echo Folder !folname! does not exist, creating
md "!folname!"
) else (
echo Folder !folname! exists
)
echo Moving file %%A to folder !folname!
move "%%A" "!folname!"
)
echo Finished
tree /f
pause
用for /f %%D in ("!fname:_=\!") do set folname=%%~pD
替换每个_
,然后获取"路径" (\
),删除最后一个元素。然后将%%~pD
更改回\
并删除第一个和最后一个字符(将其作为路径处理的方式的剩余部分)
(_
行只是为了生成一些文件进行测试)