переменная пакетного скрипта в цикле сбоя - PullRequest
0 голосов
/ 04 июня 2019

Я хочу создать пакетный скрипт для перемещения моих файлов в соответствующую папку в соответствии с их идентификатором.

пример:

имя файла E: \ folderPath \ Pre001Post.csv, будет перемещено в папку E: \ folderPath \ M001 \

001 - это идентификатор, «Pre» и «Post» были случайными, 2 ноля было ведущим для числа меньше 10.

имя файла E: \ folderPath \ Pre099Post.csv, будет перемещено в папку E: \ folderPath \ M099 \

099 - это идентификатор, «Pre» и «Post» были случайными, 1 ноль приводил к числу меньше 100.

имя файла E: \ folderPath \ Pre109Post.csv, переместится в папку E: \ folderPath \ M109 \

109 - идентификатор, «Pre» и «Post» были случайными.

ниже был мой сценарий,

    @setlocal enabledelayedexpansion
    for /l %%S in (1, 1, 111) do (
         IF %%S LSS 10 ( SET z=00%%S ) ELSE (goto:moveFileProcess)
         IF %%S LSS 100 ( SET z=0%%S ) ELSE (goto:moveFileProcess)
    :moveFileProcess
         echo !z!
         echo %z%
    MOVE /Y E:\folderPath\???%z%????.csv E:\folderPath\M%z%\
    )

Проблема заключалась в том, что я не смог установить значение переменной %% s равным z (с ведущим 00).

Я следовал Пакетные файлы Windows: что такое расширение переменных и что означает EnableDelayedExpansion? для добавления @setlocal enabledelayedexpansion, но его по-прежнему не удается. Кто-нибудь знает, в какой части я ошибся?

1 Ответ

3 голосов
/ 04 июня 2019

извините, в цикле не разрешены никакие метки и goto (кроме выпрыгивания из цикла при определенном условии).

Я немного переписал ваш скрипт.Вы забыли отложить-развернуть z в команде move, и я реализовал другой способ для вашего счетчика:

@setlocal enabledelayedexpansion
for /l %%S in (1001, 1, 1111) do (
   set "z=%%S"
   set "z=!z:~-3!"
   ECHO MOVE /Y "E:\folderPath\???!z!????.csv" "E:\folderPath\M!z!\"
)

Удалите команду ECHO после устранения неполадок / проверки того, что вы делаете то, что вам нужно.

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