我已经在下面创建了一个批处理命令脚本,但它在具有超级用户权限的Windows XP中不起作用
@echo off
for /f "delims=" %%a in ('wmic OS Get localdatetime ^| find "."') do set dt=%%a
set YYYY=%dt:~0,4%
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%
set stamp=%YYYY%-%MM%-%DD%_%HH%-%Min%-%Sec%
xcopy "D:\secure" "D:\secure_bak\bak - %stamp%" /i
我收到如下错误
无法注册mof文件。 只有管理员组成员才能使用WMIC.EXE。 原因:Win32错误:访问被拒绝
请为WMIC.EXE建议替代方案,以便我也可以在XP中使用Power User权限。
提前感谢您的帮助。
此致
答案 0 :(得分:1)
此脚本为您提供可靠的变量,但在批处理文件中使用VBS:
:: date time using WSH/VBS
:: datetime.bat V4.2
::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::
:: This uses Windows Scripting Host to set variables to
:: the current date/time/day/day_number/week_of_year etc
:: for Win9x/ME/NT/W2K/XP/Vista/Win7/Win8 etc
:: Thanks go to Todd Vargo for his scripting
::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@echo off
set TmpFile="%temp%.\tmp.vbs"
echo> %TmpFile% n=Now
echo>>%TmpFile% With WScript
echo>>%TmpFile% .Echo "set m1=" + monthname(month(n), true)
echo>>%TmpFile% .Echo "set m2=" + monthname(month(n), false)
echo>>%TmpFile% .Echo "set woy=" + CStr(datepart("ww", n))
echo>>%TmpFile% .Echo "set year=" + CStr(Year(n))
echo>>%TmpFile% .Echo "set yr=" + Right(Year(n),2)
echo>>%TmpFile% .Echo "set month="+ Right(100+Month(n),2)
echo>>%TmpFile% .Echo "set day=" + Right(100+Day(n),2)
echo>>%TmpFile% .Echo "set hour=" + Right(100+Hour(n),2)
echo>>%TmpFile% .Echo "set min=" + Right(100+Minute(n),2)
echo>>%TmpFile% .Echo "set sec=" + Right(100+Second(n),2)
echo>>%TmpFile% .Echo "set dow=" + WeekDayName(Weekday(n),1)
echo>>%TmpFile% .Echo "set dow2=" + WeekDayName(Weekday(n))
echo>>%TmpFile% .Echo "set iso=" + CStr(1 + Int(n-2) mod 7)
echo>>%TmpFile% .Echo "set iso2=" + CStr(Weekday(n,2))
echo>>%TmpFile% End With
cscript //nologo "%temp%.\tmp.vbs" > "%temp%.\tmp.bat"
call "%temp%.\tmp.bat"
del "%temp%.\tmp.bat"
del %TmpFile%
set TmpFile=
set stamp=%year%-%month%-%day%.%hour%_%min%_%sec%
if not "%~1"=="" goto :EOF
echo The year is "%year%" or "%yr%"
echo The month is "%month%" "%m1%" "%m2%"
echo The day is "%day%" "%dow%" "%dow2%"
echo.
echo ISO8601 Day-Of-Week number is "%iso%" and week of year is: "%woy%"
echo.
echo The time in hh:mm:ss is "%hour%:%min%:%sec%"
echo The hour is "%hour%"
echo The minute is "%min%"
echo The second is "%sec%"
echo.
echo The date and time stamp is "%stamp%"
echo.
echo date A yyyymmdd "%year%%month%%day%"
echo date B mmddyyyy "%month%%day%%year%"
echo date C ddmmyyyy "%day%%month%%year%"
echo date D yymmdd "%yr%%month%%day%"
echo date E mmddyy "%month%%day%%yr%"
echo date F ddmmyy "%day%%month%%yr%"
pause
:: datetime.bat
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
答案 1 :(得分:0)
我没有足够的评论声誉,这就是我回答而不是评论的原因。
除了 Foxdrive 的回答。
日期/时间提取代码是可重用的,然后我更喜欢将这些例程存储在单独的文件中,以便从其他批次中进行调用。
另外,最近我学到了有用的技术。
这是我在2008r2下使用的实际批次的一部分:
for /f %%a in ('wmic path win32_localtime get minute /format:list ^| findstr "="') do (set %%a)
嗯,它使用了禁止的WMIC,但我之所以提到它是另一个原因。请注意extract命令中的(设置%% a)部分。带有 / format:list 的WMIC会返回分钟= 57 这样的对列表,我们将这些对用作 set 命令的参数,制作WMIC的结果环境变量的名称。 可以将这些技术应用于Foxdrive的方法。应该创建.vbs文件,生成类似的变量列表。
rem GetDateTime.vbs
rem Based on foxdrive//SE code
n=Now
With WScript
.Echo "YYYY=" + CStr(Year(n))
.Echo "MM="+ Right(100+Month(n),2)
.Echo "DD=" + Right(100+Day(n),2)
.Echo "HH=" + Right(100+Hour(n),2)
.Echo "Min=" + Right(100+Minute(n),2)
.Echo "Sec=" + Right(100+Second(n),2)
End With
然后,在主批次中我们使用 for 运算符(可能需要.vbs位置的路径):
for /f %%a in ('cscript /nologo GetDateTime.vbs') do (set %%a)
就是这样:在 之后,我们将根据需要设置六个变量。
P.S。再次感谢foxdrive,另一个提示:在需要时添加100个小数字以添加前导零。我觉得自己很惭愧,因为我使用史前 ifs 喜欢
if /i %month% lss 10 (
set mon1=0%month%
) else (
set mon1=%month%
)