在Windows中使用批处理文件生成GUID

65

我如何在 Windows 命令行中运行批处理文件来生成 GUID?


没有现成的命令可以完成这个任务。你可以自己写一个,或者使用已有的工具。 - Dirk Vollmar
3
顺便提一下,MS-DOS 至少已经死亡了10年。运行批处理文件的程序是命令提示符。 - Tim Robinson
1
https://dev59.com/z3RB5IYBdhLWcg3wn4bb - onder
9
@Tim Robinson: 感谢您的意见,期待您在创建GUID方面的帮助。 - Pratik
11个回答

88

Windows SDK自带一个名为uuidgen的工具(如果您安装了Visual Studio,则会有Windows SDK,并且您需要运行Visual Studio命令提示符来设置正确的路径)。

C:\>uuidgen

这将输出一个新的 GUID,例如:

cc23b318-156e-473f-aa6e-517bf091a0f0


也许可以单独下载并安装Windows SDK?虽然这对于一个实用程序来说有点多余,但编写自己的程序比等待下载更快。 - Tim Robinson
在无法下载 SDK 的情况下,有什么其他替代方案? - Pratik
如果你没有其他选择,你可能需要编写自己的GUID生成器。 - Tim Robinson
你需要在uuidgen上使用-c选项来创建一个Windows安装程序项目文件。 - sweetfa
1
有趣的是,我有三个不同版本的VS但uuidgen对我来说不在PATH中。而且,它似乎并不是真正随机的,而是基于时间的(此实用程序的Unix版本具有“-r”和“-t”标志,以指定您是否希望其基于随机或基于时间)。 - Camilo Martin
显示剩余3条评论

32

如果您拥有PowerShell环境,请尝试这个。

FOR /F %a IN ('POWERSHELL -COMMAND "$([guid]::NewGuid().ToString())"') DO ( SET NEWGUID=%a )

然后从%NEWGUID%中准备好Guid值。


3
如果要编写批处理文件(.bat),请不要忘记在 FOR 语句中将 % 号加倍(因此该行应为 FOR /F %%a IN ('POWERSHELL -COMMAND "$([guid]::NewGuid().ToString())"') DO ( SET NEWGUID=%%a ))。请注意,这里的修改只是为了使其更符合中文表达习惯,并没有改变原意。 - youen
2
@Soundararajan 自 Vista 以来,PowerShell 和 .NET 在所有 Windows 版本中都可用。 - phuclv

29

在 PowerShell 中很容易操作

[guid]::NewGuid()

7
现在更加简单了:New-Guid - Herohtar

26

1.创建一个名为myuuid.vbs的文件,内容如下:

set obj = CreateObject("Scriptlet.TypeLib")  
WScript.StdOut.WriteLine Mid(obj.GUID, 2, 36)

2. 打开命令提示符

cscript //NoLogo myuuid.vbs

使用Java代码

    UUID uuid = UUID.randomUUID();
    String randomUUIDString = uuid.toString();

@Pratik 这是 VB Script 代码,可以完成你的任务,你不需要任何特殊的环境,只需按照提到的两个步骤即可。 - jmj
@Pratik,你是否按照步骤2的要求进行操作了?从命令行中输入应该是“script //NoLogo myuuid.vbs”。 - jmj
@Pratik 输入 "cscript //NoLogo myuuid.vbs" - jmj
1
@Pratik 这里是使用VBS创建文件的示例,它已经存储在变量OBJ中。我对VBS不是很了解,否则我会告诉你的 :) - jmj
1
安装cygwin,并确保您拥有_util-linux_软件包。 这将为您提供uuidgen命令。 - bobbogo

11
这将把一个新的GUID复制到您的剪贴板上:
POWERSHELL -c "[guid]::NewGuid().ToString().ToUpper()" | CLIP

最近的版本有类似这样的 cmdlets:
POWERSHELL -c "New-Guid | Set-Clipboard"

11

没有内置的命令可以实现这个功能。要么编写自己的程序,要么获取现有的程序。

可以使用C#编写一个简单的程序,在控制台输出GUID:

class Program
{
    static void Main(string[] args)
    {
        System.Console.WriteLine(System.Guid.NewGuid().ToString());
    }
}

将上述片段放入名为guidgen.cs的文件中,然后使用以下命令行进行编译(您的系统必须安装.NET Framework 2.0):

%WINDIR%\Microsoft.NET\Framework\v2.0.50727\csc.exe guidgen.cs 

这将创建一个名为guidgen.exe的可执行文件。


似乎是C#。我有一台很老的电脑,没有.NET框架,这个能用吗?还是您有其他解决方案? - Pratik
@Pratik:多大了?它真的在运行MS-DOS吗?你有任何编译器可用吗? - Dirk Vollmar
DOS版本5.1.2600在Windows XP上。我对编译器一无所知。 - Pratik
有没有想法为什么我无法在bash中使用 $ guidgen | clip 命令来剪切输出?我不得不将其包装在一个函数中并导出为 guidgen() { echo "$(guidgen.exe)"; } export -f guidgen(请参见 https://dev59.com/1nI_5IYBdhLWcg3wK_o6#1500592)。 - hIpPy
ToString调用是不必要的,因为WriteLine已经有了System.Object的重载版本,它可以做同样的事情。不确定在性能方面,创建字符串实例是否比装箱更差,但它肯定更长且不易阅读。 - Palec

5
如果你想使用纯CMD命令来完成,可以使用类似以下的命令(这不是真正的GUID,但根据你的情况它可能会有所帮助):
@call :GetGuid NewGuid
@echo My new GUID : %NewGuid%

@goto :eof


:GetGuid
 @set _guid=%computername%%date%%time%
 @set _guid=%_guid:/=%
 @set _guid=%_guid:.=%
 @set _guid=%_guid: =%
 @set _guid=%_guid:,=%
 @set _guid=%_guid::=%
 @set _guid=%_guid:-=%
 @set %1=%_guid%
@goto :eof

将内容保存为.BAT文件并运行。在我的电脑上(Windows 8)可以运行。 - Aaron D
最好在一个 .CMD 文件中执行,以便由 CMD.EXE 解释,而不是 COMMAND.COM ;-) http://www.differencebetween.net/technology/difference-between-cmd-and-bat/ - efdummy
为什么不直接在开头加上@echo off,而不是在每个命令前面加上@呢? - phuclv
在调试脚本时,为每个命令加上@前缀是非常有用的。如果你怀疑某一行代码运行不正常,只需去掉该行的@符号并重新运行脚本,你就可以在控制台看到发生了什么。 - efdummy

4
尝试使用uuid.bat。 如果没有参数,它将只输出生成的uuid
c:\>uuid.bat

2186cb38-d649-4c99-b7cc-c505e4dae9c2

如果传递了参数,它将被存储在同名变量中:

call uuid.bat my_uuid
echo %my_uuid%

对于Windows格式的GUID,您可以使用guid.bat

for /f %a in ('guid.bat') do set guid=%a
echo %guid%

2

可以滥用bitsadmin来生成GUID。这比从批处理脚本中调用PowerShell要快得多。

@echo off & setlocal

for /f "delims={}" %%I in ('bitsadmin /rawreturn /create guid') do set "GUID=%%~I"
>NUL bitsadmin /cancel {%GUID%}

echo Your new GUID is %GUID%.  Neat.

如果您想保留周围的大括号,请删除 "delims={}" 并将 {%GUID%} 替换为 %GUID%


2
如果您已安装 dotnet
$ dotnet tool install -g guid
$ guid
bf4be9d0-7d1b-485c-a435-d07fd7b892f0
$ guid help
Usage:

    guid [option]

Where [option] is an optional single character that controls formatting:

    N    B382C3F44E604D08B48A2D342A659B4E
    D    B382C3F4-4E60-4D08-B48A-2D342A659B4E
    B    {B382C3F4-4E60-4D08-B48A-2D342A659B4E}
    P    (B382C3F4-4E60-4D08-B48A-2D342A659B4E)

When unspecified, 'd' formatting is used. Use lowercase [option] for lowercase output.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接