第一次海报...抱歉,如果我错过了一些简单的东西... 当我尝试在FOR
循环中分配日期/时间时,处理的每个文件都使用相同的日期/时间。我相信这是由于使用了%符号而不是使用!符号,但我似乎找不到一种方法来让它工作。 我读过
"此变量子字符串语法仅适用于 CMD 环境 变量,如 %MYVAR%,它不适用于 FOR 参数 变量,如 %%G,但一个简单的解决方法是设置一个变量 first:设置 %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%DownloadsNearmap!timestamp!
powershell -command "Expand-Archive -Force -Path !name! -DestinationPath !destpath!"
)
@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%DownloadsNearmap!timestamp!"
powershell -command "Expand-Archive -Force -Path '!name!' -DestinationPath '!destpath!'"
endlocal
)
将- 路径用双引号括起来以避免空格和特殊字符问题。
- 启用和禁用循环中的延迟扩展有助于避免路径 如果
!
存在并在启用时被剥离,!
则变为无效。 - powershell 命令中使用的路径可以单引号 (这被视为文字字符串,这很好)。
- 时间戳是基于区域设置的,因此无法确定我的测试是否 环境与你的环境相似。