我有一个文件夹,其中包含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
我有足够好的代码,但是最近发现错误输出。
答案 0 :(得分:0)
通过运行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),并使用,
分隔符。然后,我们仅使用令牌来执行move命令来移动文件。因此,它几乎可以从您的csv中拆分出来:
D:\somedir,007-007.tif,008.tif
到
D:\somedir --> %%i
007-007.tif --> %%j
008.tif --> %%k
您可以通过从cmd.exe运行for /?
来获取更多信息