将基于参数(连字符)的Tiff文件从文件夹转置为CSV

时间:2019-02-14 05:50:48

标签: excel vba batch-file

我有一个文件夹,其中包含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

我有足够好的代码,但是最近发现错误输出。

code

Transpose output

1 个答案:

答案 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 /?来获取更多信息