在filename之前获取字符串的一部分作为目录

时间:2018-04-10 07:12:32

标签: windows batch-file substring token delimiter

目录中有一个图像列表。我想创建一个只重复所有文件的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

提前致谢!

1 个答案:

答案 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更改回\并删除第一个和最后一个字符(将其作为路径处理的方式的剩余部分)

_行只是为了生成一些文件进行测试)