2

我有一组文件要复制到一组新的子文件夹中。

例如:
0_107_206.tif
1_0_69.tif
1_16_75.tif
1_40_117.tif 2_0_36.tif
2_26_62.tif
35_0
​​_19.tif

这些文件存储在基于文件名的第一个子字符串(例如 0、1 或 35)的文件夹中。我想根据 2 个“_”字符之间的第二个子字符串创建子文件夹。我已经尝试了几件事

SETLOCAL ENABLEDELAYEDEXPANSION
FOR %%B in (*.tif) DO (
SET FileName=%%B
SET FileName1=!FileName:~2!
SET FileName2=!FileName1:~0,-7!
MD %TargetPath%!FileName2!
)
ENDLOCAL

但这不够灵活。有没有办法获取“_”字符的位置并将其输入到 SUBSTRING 函数中?当然,这需要循环工作,因为我需要处理数千个文件。
提前致谢。

4

2 回答 2

3
FOR %%B in (*.tif) DO (
    for /f "tokens=1,2 delims=_" %%x in ("%%~B") do (
        md "%TargetPath%%%~y"
        copy %%~B "%TargetPath%%%~y\%%~B"
    )

)

?

于 2013-10-21T13:32:57.127 回答
1

给定一个文件结构

u:\0\0_107_206.tif
u:\1\1_0_69.tif
u:\1\1_16_75.tif
u:\1\1_40_117.tif
u:\2\2_0_36.tif
u:\2\2_26_62.tif
u:\35\35_0_19.tif

然后这批:

@ECHO OFF
SETLOCAL
SET "sourcedir=u:"
SET "destdir=c:\destdir"
 FOR /f "tokens=1*delims=" %%a IN (
  'dir /s /b /a-d "%sourcedir%\*_*_*.tif" '
  ) DO FOR /f "tokens=1,2,3delims=_" %%B IN ("%%~na") DO (
   ECHO MD "%destdir%\%%C"
   ECHO COPY /b "%%a" "%destdir%\%%C\"
 )
GOTO :EOF

会产生

MD "c:\destdir\107"
COPY /b "u:\0\0_107_206.tif" "c:\destdir\107\"
MD "c:\destdir\0"
COPY /b "u:\1\1_0_69.tif" "c:\destdir\0\"
MD "c:\destdir\16"
COPY /b "u:\1\1_16_75.tif" "c:\destdir\16\"
MD "c:\destdir\40"
COPY /b "u:\1\1_40_117.tif" "c:\destdir\40\"
MD "c:\destdir\0"
COPY /b "u:\2\2_0_36.tif" "c:\destdir\0\"
MD "c:\destdir\26"
COPY /b "u:\2\2_26_62.tif" "c:\destdir\26\"
MD "c:\destdir\0"
COPY /b "u:\35\35_0_19.tif" "c:\destdir\0\"

因此,您只需要更改源目录和目标目录名称即可;如果合适,将copy命令更改为;move删除ECHO要激活的关键字。

您还可以附加2>nul到该MD行以禁止显示“目录已存在”消息。

或者,您可以替换为COPYXCOPY然后MD将变得无关紧要。

于 2013-10-21T14:11:18.760 回答