два условия в одном цикле (пакетный файл) - PullRequest
0 голосов
/ 21 января 2019

Я построил 2 пакетных файла, каждый из которых имеет свою собственную первую функцию:

Изменяет имя файла на сегодняшнюю дату

SET src_folder="C:\DIR_A\"
SET tar_folder="C:\DIR_A\DIR_B"


for /f %%a IN ('dir "%src_folder%" /b') do REN *.xml %time:~0,2%%time:~3,2%%time:~6,2%_%date:~-10,2%%date:~-7,2%%date:~-4,4%.xml 

pause

Второй:

Перемещение файлов из DIR_A в DIR_B

SET src_folder="C:\DIR_A\"
SET tar_folder="C:\DIR_A\DIR_B"

for /f %%a IN ('dir "%src_folder%*.xml" /b') do move %src_folder%\%%a %tar_folder%

pause

Мой вопрос: как я могу объединить их обоих в один цикл?

Второй вопрос связан с циклом именования. Цикл только именует первый XML-файл и говорит, что имя уже существует. Это правда, так или иначе, можно ли сделать паузу перед повторным именем, чтобы файлы имели разные имена?

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Проще всего сделать это за один раз, без переименования, просто переместить их с новым именем:

@echo off
for %%a IN (*.xml) do (
    move "%source_folder%\%%a" "%tar_folder%\%time:~0,2%%time:~3,2%%time:~6,2%_%date:~-10,2%%date:~-7,2%%date:~-4,4%.xml"
)
pause

Другие методы:

@echo off
setlocal enabledelayedexpansion
for /f %%a IN ('dir /b /a-d "%src_folder%\*.xml"') do (
    set "myren=%time:~0,2%%time:~3,2%%time:~6,2%_%date:~-10,2%%date:~-7,2%%date:~-4,4%.xml"
    ren "%%a" "!myren!"
    move "%src_folder%\!myren!" "%tar_folder%"
)
pause

Или без delayedexpansion:

@echo off
for /f %%a IN ('dir /b /a-d "%src_folder%\*.xml"') do (
    move "%%a" "%tar_folder%"
    ren "%tar_folder%\%%a" "%time:~0,2%%time:~3,2%%time:~6,2%_%date:~-10,2%%date:~-7,2%%date:~-4,4%.xml"
)
pause

или даже:

@echo off
for /f %%a IN ('dir /b /a-d "%src_folder%\*.xml"') do (
    ren "%source_folder%\%%a" "%time:~0,2%%time:~3,2%%time:~6,2%_%date:~-10,2%%date:~-7,2%%date:~-4,4%.xml"
)
move /Y "%src_folder%\*.xml" "%tar_folder%"
pause

Проще всего, сделать это за один раз:

0 голосов
/ 21 января 2019

Простой: чтобы использовать несколько команд, используйте блок кода:

for %%a IN ("%src_folder%") do (
   echo RENAME %%a
   echo COPY %%a
)

Примечание: имейте в виду, что вам может понадобиться отложенное расширение (но не в этом примере)

Применительно к вашему коду:

@echo off
setlocal enabledelayedexpansion

SET src_folder="C:\DIR_A\"
SET tar_folder="C:\DIR_A\DIR_B"

for %%a IN ("%src_folder%*.xml") do (
  REN "%%a" !time:~0,2!!time:~3,2!!time:~6,2!_%date:~-10,2%%date:~-7,2%%date:~-4,4%.xml 
  move "%src_folder%\%%a" "%tar_folder%"
  timeout 1 >nul
)

Примечание: здесь вам нужно отсроченное расширение (как минимум) с переменной time. Подумайте также и о задержке date (будет "наилучшей практикой")

В качестве альтернативы: сначала переименуйте все файлы, затем скопируйте их за один раз:

@echo off
setlocal enabledelayedexpansion

SET src_folder="C:\DIR_A\"
SET tar_folder="C:\DIR_A\DIR_B"

for %%a IN ("%src_folder%*.xml") do (
  REN "%%a" !time:~0,2!!time:~3,2!!time:~6,2!_%date:~-10,2%%date:~-7,2%%date:~-4,4%.xml
  timeout 1 >nul
)
move "%src_folder%\*.xml" "%tar_folder%\"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...