我有包含tiff
文件的文件夹,在几张图像之间标有“ - ”,表示转置参数。一旦遇到“ - ”,反映在它们下面的文件将被转置,直到另一个“ - ”被触发。
001-001.tif
@echo off
setlocal enableDelayedExpansion
set root=D:\Testing\100
set csv=E:\JOE\Transpose1.csv
set line=-
set curpath=
set new=
>nul copy nul: %csv%
for /f %%F in ('dir /s/b %root%\*.tif') do (
if not "!curpath!" == "%%~dpF" set new=y
set fname=%%~nxF
if not "!fname:-=!" == "!fname!" set new=y
if defined new (
if defined line echo !line!>> %csv%
set line=%%~dpF
set new=
)
set line=!line!,%%~nxF
set curpath=%%~dpF
)
if defined line echo !line!>> %csv%
002.tif
003.tif
004-004.tif
我有足够好的代码,但最近注意到错误输出。
通过运行dir /?
,您将通过按名称强制命令切换/o
,它将按预期更改顺序。
默认顺序如下:
006-006
006
007-007
008-008
008
通过做dir /on
你迫使它按名称排序:
006
006-006
007-007
008
008-008
因此,我们只需在for循环中更改dir
命令:
('dir /s/b /on %root%\*.tif')
然后,我认为要移动文件,最简单的不要更改脚本。也许只是在文件末尾运行一个循环来移动文件,这个演示通过将数字增加到一个文件夹来实现,但你需要根据需要调整它,因为它不会存储下一个!cnt!
值跑。
所以我们将在脚本的最后需要:
timeout 2>nul
set /a cnt=1
for /f "tokens=1-3 delims=," %%i in (%csv%) do (
mkdir %%ifolder!cnt!>nul
move %%i%%j %%ifolder!cnt!
move %%i%%k %%ifolder!cnt!
set /a cnt+=1
)
上面的for循环读取csv文件,将其拆分为3个令牌(%% i - %% k)并使用,
分隔符。然后我们只需使用令牌来执行移动命令来移动文件。所以它几乎从你的csv分裂它:
D:\somedir,007-007.tif,008.tif
至
D:\somedir --> %%i
007-007.tif --> %%j
008.tif --> %%k
您可以通过从cmd.exe运行for /?
来获取有关此内容的更多信息