在FOR循环中分配日期/时间参数(%〜t)扩展名

时间:2019-06-09 02:07:08

标签: batch-file

第一次张贴...如果我错过了一些简单的事情,我深表歉意... 当我尝试在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 :(得分:0)

@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命令中使用的路径可以用单引号引起来 (被视为文字字符串,对此很合适)。
  • 时间戳基于区域设置,因此无法确定我的测试是否 环境与您相似。