我的难题与以下链接中的q / a线程有关:How to append date to directory path in xcopy
我是这个论坛的新手,我有同样的问题,而且我使用的是Windows 10,所以我使用foxidrive中关于如何使用WMIC的线程给出的答案,除了一个我还没想到的问题外,它的工作非常棒......
我修改了foxidrive提供的脚本,如下所示:
@echo off
for /f "delims=" %%a in ('wmic OS Get localdatetime ^| find "."') do set dt=%%a
set datestamp=%dt:~0,8%
set timestamp=%dt:~8,6%
set YYYY=%dt:~0,2%
set YY=%dt:~2,2%
set MM=%dt:~4,2%
set DD=%dt:~6,2%
set HH=%dt:~8,2%
set Min=%dt:~10,2%
set Sec=%dt:~12,2%
for /f "tokens=%dow%" %%a in ("Su Mo Tu We Th Fr Sa") do set day=%%a
set stamp=%YY%%MM%%DD%%HH%%Min%%day%
REM echo Today is %day%.
md "%stamp%MoreDirName"
xcopy %source% /E /y .\"%stamp%MoreDirName"
当我从cmd.exe运行批处理文件时,我得到了所需的结果,即,使用我想要的日期格式创建目录,并且我想要的日期和时间戳包括名称一周中的天。但是,当我在Windows资源管理器中双击批处理文件时,将创建该文件夹并复制文件夹/文件,但新文件夹名称中不会显示星期几的名称。我对此行为感到困惑,我想知道如何覆盖它。
我会更多地研究这个问题,但我不知道除了“命令行和窗口中的WMIC的不同行为”之外还要搜索什么,这样的搜索没有产生任何有用的结果。但由于我的努力是基于引用的堆栈交换q / a线程,在我看来,这是一个适当的地方来记录这种奇怪的行为并在可能的情况下得到解释,这可能有助于我和其他人以后更好地撰写脚本。
答案 0 :(得分:2)
wmic
没有问题。问题在于您的批处理文件,其中包含两个未定义的变量。)
for /f "tokens=%dow%" %%a in ("Su Mo Tu We Th Fr Sa") do set day=%%a
您不要在批处理文件中的任何位置设置dow
。
xcopy %source% /E /y .\"%stamp%MoreDirName"
您也不要在批处理文件中的任何位置设置source
。
可能发生的事情:
您的dow
环境中有source
和cmd
来自您运行的另一个不包含setlocal
命令的批处理文件(这可防止变量泄漏到cmd
父cmd
shell)。
这意味着:
如果在dow
的实例中设置了source
和cmd
,那么从cmd
shell运行的批处理文件将起作用。
从资源管理器运行的批处理无效,因为它启动了dow
shell的新实例,而source
和cmd
未定义。
更正了批处理文件:
以下是批处理文件的修改版本,该文件在从explorer
shell或rem @echo off
setlocal
set source=SomeSourceValue
rem use findstr to strip blank lines from wmic output
for /f "usebackq skip=1 tokens=1-6" %%g in (`wmic Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year ^| findstr /r /v "^$"`) do (
set _day=00%%g
set _hours=00%%h
set _minutes=00%%i
set _month=00%%j
set _seconds=00%%k
set _year=%%l
)
rem pad with leading zeros
set _month=%_month:~-2%
set _day=%_day:~-2%
set _hh=%_hours:~-2%
set _mm=%_minutes:~-2%
set _ss=%_seconds:~-2%
rem get day of the week
for /f %%k in ('powershell ^(get-date^).DayOfWeek') do (
set _dow=%%k
)
set _stamp=%_year%%_month%%_day%%_hh%%_mm%%_dow:~0,2%
md "%_stamp%MoreDirName"
xcopy %source% /E /y .\"%_stamp%MoreDirName"
endlocal
运行时正常工作,并正确设置星期几。
wmic
注意:
source
检索时间戳组件。public static <T extends Object> ListIterator<T> createListIterator(ListIterator<T> o)
{
return new ListIteratorAdaptor<T>(o);
}
。现金: