我有一个脚本可以扫描计算机上的某个注册表项。我想在扫描后创建文本文件,将日期和时间作为文件名的一部分(本地机器的日期正常)。我找到了一些似乎可以做到这一点的例子,但要么我不理解他们的答案,要么他们没有将其包含在文件名中。
如果你给出答案来解释每个部分是什么,请允许日期在文件名中。我已经看过有关令牌和索引的内容,我不明白这些是什么,但我对脚本非常新,并且我正在尝试了解这一点。
以下是我目前为脚本编写的代码。
@echo off
Setlocal
::Test Script
echo This script is used to find a registry setting.(Actual registry patch has been changed for use as an example)
set /p c= Input computer name and push enter:
set stamp=%date% at %time%
set DateTime=%stamp
call :screen
call :log
pause
:screen
echo.
echo Computer name: %c%
reg query "\\%c%\HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Registry Folder\Registry Folder2\" /V "Registry Key" | FIND "Registry Key"
echo.
goto :eof
:log
echo.
echo Registry value for %c% on %stamp% >TextFile.txt
reg query "\\%c%\HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Registry Folder\Registry Folder2\" /V "Registry Key" | FIND "Registry Key" >>TextFile.txt
echo.
goto :eof
正如您所看到的,我更改了我正在寻找的实际注册表项。老实说,任何命令都可以放在那里,因为我专注于试图找出如何使正在创建的文本文件在文件名中具有正确的时间戳。
操作系统:Windows XP和Windows 7 注意:请原谅我无法提供我正在使用的脚本语言的确切名称,因为我知道如何引用它的唯一方法是" Windows命令行脚本" ...我不会&#39甚至知道这是否正确。
答案 0 :(得分:3)
我找到答案主要是在同事的帮助下,还有一些有各种堆栈溢出帖子。我关心的不仅仅是看到答案,而是关于命令究竟发生了什么。
下面将dateTime变量设置为yyyymmdd_hhmmss中的本地日期和时间。此代码正确用于放置在脚本中。
for /f "skip=1" %%c in ('wmic os get LocalDateTime') do set DateTime=%%c
set DateTime=%DateTime:~0,8%_%DateTime:~8,6%
说明: 如果在cmd中运行以下命令
wmic os get LocalDateTime
你得到的输出(不同的数字取决于你这样做的日期/时间):
LocalDateTime
20120829151726.702000-300
现在我们需要格式化这个。为此我只关心日期和时间。第二行的日期和时间格式为yyyymmddhhmmss,并带有一些额外的gobbly goop。我们显然不想要第一行而我们不想要.702000-300。
要删除它,我们需要格式化。通过使用“skip = 1”,您正在跳过第一行。 :〜#,#帮助您选择要使用的字符(实际上不使用#字符,我只使用它作为占位符,所以你知道一个数字去那里)。第一个#是您的起始值,第二个#是起始值之后的字符数。我们希望使用前8个字符作为日期(yyymmdd),因此我们将起始值设为0(第一个#),第二个#为8。
然后我添加了下划线和当时6个字符所需的信息(hhmmss)。
在您的脚本中,您现在可以使用代码调用DateTime变量。
echo Hello!>>BestFileEver_%DateTime%.txt
现在,文本中包含单词hello的文件将具有以下文件名:
BestFileEver_20120829_153326.txt
现在很明显,根据你这样做的时间,数字会有所不同。