1

我有一个脚本可以扫描计算机以查找某个注册表项。我想在扫描创建的文本文件后将其包含在文件名中的日期和时间(本地计算机的日期可以)。我发现了一些似乎可以做到这一点的示例,但要么我不明白他们的答案,要么他们没有将其包含在文件名中。

请,如果您给出答案来解释允许日期在文件名中的每个部分是什么。我看过有关令牌和索引的东西,但我不明白它们是什么,但我对脚本非常陌生,并且正在尝试了解这一点。

以下是我的脚本到目前为止的代码。

@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 命令行脚本”......我甚至不知道这是否正确。

4

1 回答 1

4

我主要是在同事的帮助下找到了答案,还有一些是在各种堆栈溢出帖子的帮助下找到的。我不仅关心看到答案,还关心命令到底发生了什么。

下面将 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

现在显然数字会根据您执行此操作的时间而有所不同。

于 2012-08-29T20:39:37.497 回答