获取文件名前的部分字符串作为目录
Get part of string before filename as directory
目录中有图像列表。我想创建一个只迭代所有文件的 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
提前致谢!
你基本上只需要改变你的方法来获取文件夹(看起来有点复杂,但具有没有固定标记的优点;获取除最后一个元素之外的所有元素。所以:1812_1005541_5226_983_1B.tif
将变为 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
用 \
替换每个 _
,然后得到 "path" (%%~pD
),删除最后一个元素。然后改回 \
到 _
并删除第一个和最后一个字符(将其处理为路径的方式的剩余部分)
(break
行只是为了生成一些文件用于测试)
目录中有图像列表。我想创建一个只迭代所有文件的 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
提前致谢!
你基本上只需要改变你的方法来获取文件夹(看起来有点复杂,但具有没有固定标记的优点;获取除最后一个元素之外的所有元素。所以:1812_1005541_5226_983_1B.tif
将变为 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
用 \
替换每个 _
,然后得到 "path" (%%~pD
),删除最后一个元素。然后改回 \
到 _
并删除第一个和最后一个字符(将其处理为路径的方式的剩余部分)
(break
行只是为了生成一些文件用于测试)