Назначить расширение параметра даты / времени (% ~ t) в цикле FOR - PullRequest
0 голосов
/ 09 июня 2019

Первый постер ... Извиняюсь, если мне не хватает чего-то простого ... Когда я пытаюсь назначить дату / время в цикле FOR, для каждого обрабатываемого файла используется одна и та же дата / время. Я полагаю, что это связано с использованием символа % вместо использования символа ! , но я не могу найти способ заставить это работать. Я прочитал

"Этот синтаксис подстроки переменной работает только для среды CMD переменные, такие как% MYVAR%, не будут работать с параметром FOR переменные, такие как %% G, однако простой обходной путь - установить переменную сначала: установите% MYVAR% = %% G, а затем найдите подстроку нового переменная. "

но это, похоже, не работает, я предполагаю, что это потому, что это больше не файл, а просто строка и не будет иметь атрибутов даты / времени ??? Любые предложения будут очень приветствоваться. С уважением.

Аргументы командной строки (параметры) (https://ss64.com/nt/syntax-args.html)

Переменные: извлечь часть переменной (подстроку) (https://ss64.com/nt/syntax-substring.html)

SETLOCAL EnableDelayedExpansion
for /R %USERPROFILE%\Downloads %%F in (EPSG*.zip) do (
set name=%%F
set timestamp=%%~tF
set timestamp=!timestamp:~0,16!
set timestamp=!timestamp:/=!
set timestamp=!timestamp: =_!
set timestamp=!timestamp::=!
set destpath=%USERPROFILE%\Downloads\Nearmap\!timestamp!
powershell -command "Expand-Archive -Force -Path !name! -DestinationPath  !destpath!"
)

1 Ответ

0 голосов
/ 09 июня 2019
@echo off
setlocal DisableDelayedExpansion

for /R "%USERPROFILE%\Downloads" %%F in (EPSG*.zip) do (
    set "name=%%~F"

    setlocal EnableDelayedExpansion
    set "timestamp=%%~tF"
    set "timestamp=!timestamp:~0,16!"
    set "timestamp=!timestamp:/=!"
    set "timestamp=!timestamp: =_!"
    set "timestamp=!timestamp::=!"
    set "destpath=%USERPROFILE%\Downloads\Nearmap\!timestamp!"
    powershell -command "Expand-Archive -Force -Path '!name!' -DestinationPath '!destpath!'"
    endlocal
)
  • Двойная кавычка путей, чтобы избежать пробелов и проблем со специальными символами.
  • Включение и отключение отложенного раскрытия в цикле может помочь избежать превращения путей в ! в недействительные значения, если !существует и удаляется при включении.
  • Пути, используемые в команде powershell, могут заключаться в одинарные кавычки (, который обрабатывается как буквенная строка, которая подходит для этого ).
  • Временная метка основана на локали, поэтому я не уверен, что моя тестовая среда похожа на вашу.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...