相关疑难解决方法(0)

如何比较批处理脚本中文件的时间戳?

在DOS批处理文件中,实现某些事情的方法有些混淆.幸运的是,有一个很棒的批处理脚本参考站点:Simon Sheppard的SS64.(同一网站也有大量关于Bash的信息.)

一个难点是根据目录是否为空来分支执行.显而易见的if exist "%dir%\*.*"是行不通的.但是可以使用这个条件执行技巧来完成:

( dir /b /a "%dir%" | findstr . ) > nul && (
  echo %dir% non-empty
) || (
  echo %dir% empty
)
Run Code Online (Sandbox Code Playgroud)

另一个尴尬的问题是根据文件内容进行分支.再次,可以这样做:

( fc /B "%file1%" "%file2%" | find "FC: no differences encountered" ) > nul && (
  echo "%file1%" and "%file2%" are the same
) || (
  echo "%file1%" and "%file2%" are different
)
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是:
有没有办法根据文件的时间戳做分支?

这是我想要的东西:

REM *** pseudo-code!
if "%file1%" is_newer_than "%file2%" (
  echo …
Run Code Online (Sandbox Code Playgroud)

filesystems cmd batch-file

28
推荐指数
6
解决办法
7万
查看次数

批量WMIC重定向输出并包装到变量中

我正在尝试使用WMIC删除旧打印服务器上的旧打印机

如果我从命令行使用以下语法,它的工作原理

WMIC PRINTER WHERE"SERVERNAME LIKE'%% OLDSERVERNAME %%'"DELETE

我被问到是否可以让它更换打印机或更新它们以免帮助台获得"如何添加我的打印机"电话

我尝试使用SET的一些变体来设置SERVERNAME的属性,它似乎处理,但没有任何变化,并且执行GET仍然显示旧值.

所以我想我可以做一个FOR/F循环,在变量中包装打印机的名称(sharename),然后在删除违规打印机后使用另一个命令重新创建打印机.

这是我的剧本

@ECHO

ECHO Gathering Installed Printer Information...

FOR /F "tokens=1 skip=1" %%A IN ('WMIC PRINTER WHERE "Servername like "%%printaz1%%"" get sharename') DO SET PRINTERNAME=%%A

ECHO %PRINTERNAME%
Run Code Online (Sandbox Code Playgroud)

所以你会认为你得到的所有值都包含在一个很好的变量中,你可以根据自己的意愿去做,但是没有,我开启了回声,看起来这个变量一旦被捕获就会被设置回null

我的输出看起来像这样......

FOR /F "tokens=1 skip=1" %%A IN ('WMIC PRINTER WHERE "Servername like "%%printaz1%%"" get sharename') DO SET PRINTERNAME=%%A

SET PRINTERNAME=nameofprinter

SET PRINTERNAME=

ECHO

ECHO is on.
Run Code Online (Sandbox Code Playgroud)

我会喜欢一些关于为什么它似乎倾销字符串的想法.

Powershell和VBScript也不是不可选择的,我对两者都很熟悉,这似乎有可能,而且我真的不想重新开始.

wmi batch-file wmi-query wmic

2
推荐指数
1
解决办法
2万
查看次数

如何批量获取与文件无关的修改时间和文件创建时间?

随着一批变量/参数扩展像%~t1一个可以得到一个文件的时间戳.

我想将文件的年份设置为另一个变量,以支持多个语言环境.

如何获取文件的日期时间,与区域设置和区域设置无关?请不要使用powershell.

datetime localization batch-file filemtime regional-settings

2
推荐指数
1
解决办法
514
查看次数