【问题标题】:Trying to rename a computer OR execute a .bat file in Java尝试重命名计算机或在 Java 中执行 .bat 文件
【发布时间】:2011-10-17 16:39:56
【问题描述】:

我正在尝试编写一个脚本来重命名一台计算机(除其他外),但似乎无法弄清楚。我真的不在乎我用什么方法来改变电脑,只要我能改变它。我通过做

了解了如何读取计算机名称
String computername = InetAddress.getLocalHost().getHostName();

但是,这似乎对设置计算机名称没有任何帮助。有没有办法直接在java控制台中设置计算机名?

如果没有,或者如果有人在这方面有更好的经验,我还使用 powershell 2.0 编写了一个脚本来重命名计算机。我正在尝试弄清楚如何使用

 Runtime rt = Runtime.getRuntime();
 Process proc = rt.exec("file location");

我按照指南 here 进行操作,但是当尝试运行应该只打开命令行的测试 .bat 文件时,我只是在 java 控制台中得到以下输出:

    C:\Users\Stephen\Desktop\opencmd.bat is found 
OUTPUT>
OUTPUT>C:\Users\Stephen\workspace\UNM computer rename>cmd.exe
OUTPUT>Microsoft Windows [Version 6.1.7601]
OUTPUT>Copyright (c) 2009 Microsoft Corporation.  All rights reserved.
OUTPUT>

看起来它只是将命令行输出吐回 java 控制台,而不是仅仅运行命令并打开 cmd 行。

非常感谢您的意见,因为我在这里时间很紧,谢谢!

【问题讨论】:

    标签: java windows batch-file rename


    【解决方案1】:

    首先,JDK 确实不提供允许更改计算机名称的纯 java API。所以你必须运行脚本。

    其次,如果您想使用 Runtime 运行脚本,您必须提供正确的命令行。所以首先尝试手动运行你的脚本。我相信它接受至少一个参数(新的计算机名称)。所以从命令提示符运行它,看看它是否正常工作。然后把它放到你的java程序的工作目录中,将命令行复制/粘贴到java代码中,看看它现在正在运行。如果您愿意,您可以阅读脚本的 STDOUT 和/或获取其返回码。如果您不关心它的输出,只需调用 process.waitFor() 然后获取返回码。

    注意参数。 Windows 计算机名称可能包含 Unicode 字符和空格。如果它包含空格,请用引号括起来。关于unicode,试试吧。希望不会给您带来麻烦。

    您还可以使用 ProcessBuilder 类,该类允许更好、更便携的参数传递。

    祝你好运。

    【讨论】:

    • 感谢 AlexR,我已经让脚本运行,但我仍在试图弄清楚如何以提升的权限运行它,但在任何地方都找不到方法。有什么想法吗?
    【解决方案2】:

    看起来 opencmd.bat 正在执行,所以假设您的 PowerShell 脚本有效,您是否可能没有 administrative privileges

    您也可以使用 JNA 优雅地做到这一点,我认为 this 将是目标。但是,如果您赶时间,请不要打扰。

    【讨论】:

    • 我不确定您的链接指的是 Gnon,但您是对的,我需要以管理员身份运行脚本,否则我将无法成功更改计算机名称。我在试图弄清楚如何以管理员身份运行此脚本时束手无策,我找不到在 CMD 行、powershell 或 java 中以提升的权限运行任何东西的方法。使用 sudo 命令会非常简单...
    • 哦,因为这需要完全自动,我无法右键单击并以管理员身份运行,甚至无法提示用户进行身份验证,我需要能够在脚本中或通过命令行。
    • 你可以使用bat文件中的参数-runas吗?
    猜你喜欢
    • 2021-06-12
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    相关资源
    最近更新 更多