Транспонировать файлы Tiff из папки на основе параметра (дефис) в CSV - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть папка, которая содержит 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 голосов
/ 14 февраля 2019

Запустив dir /?, вы увидите переключатель порядка /o, принудительно введя его по имени, и он изменит порядок, как и ожидалось.

По умолчанию порядок будет таким:

006-006
006
007-007
008-008
008

выполнив dir /on, вы заставляете его упорядочить по имени:

006
006-006
007-007
008
008-008

Поэтому мы просто меняем команду dir в цикле for:

('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) и использовать , delimeter.Затем мы просто используем токены для выполнения команды перемещения для перемещения файлов.Таким образом, это в значительной степени разделяет его как таковой от вашего CSV:

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

до

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

Вы можете получить более подробную информацию об этом, запустив for /? из cmd.exe

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...