根据参数(连字符)将文件夹中的Tiff文件转置为CSV

问题描述 投票:-1回答:1

我有包含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

excel vba batch-file
1个回答
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)并使用,分隔符。然后我们只需使用令牌来执行移动命令来移动文件。所以它几乎从你的csv分裂它:

D:\somedir,007-007.tif,008.tif

D:\somedir   --> %%i
007-007.tif  --> %%j
008.tif      --> %%k

您可以通过从cmd.exe运行for /?来获取有关此内容的更多信息

© www.soinside.com 2019 - 2024. All rights reserved.