Board logo

标题: (已结)XP CMD下如何判断计算机名? [打印本页]

作者: voiL     时间: 2005-11-2 12:31    标题: (已结)XP CMD下如何判断计算机名?
环境:Win XP(CMD)

有多台计算机,都在重复做一件事情,但是每台计算机名字都不一样.

我不可能为每一台计算机都量身写个批处理.

请问有什么办法可在批处理中得到本身的名字??

然后根据名字做出跳转???

Last edited by voiL on 2005-11-5 at 10:39 ]

作者: willsort     时间: 2005-11-2 12:58
Re voiL:

CMD 提供环境变量 %USERDOMAIN% 来引用完整的计算机名称。而通过 for /f 的字符串切分功能可以得到简单的计算机名称,即不包含其后的序列码。

Last edited by willsort on 2005-11-2 at 17:46 ]

作者: chenhui530     时间: 2005-11-2 16:13
%username%

作者: voiL     时间: 2005-11-2 17:34
由于对for命令还不熟悉,今天下午用willsort兄的方法试了一个下午也没能成功把命令写出来.

麻烦各位大哥把语句写出来吧.

例子就以三台计算机作示范(名字分别为:C1,C2,C3).

在取得自身机器名字后,通过网上邻居到其它两台机子的Share目录下copy所有的文件.

小弟在此先行谢过所有提供帮助的朋友.

Last edited by voiL on 2005-11-2 at 17:38 ]

作者: chenhui530     时间: 2005-11-3 13:20
看错意思了使用
%computername%吧

作者: voiL     时间: 2005-11-3 16:02
%USERDOMAIN%可以取得计算机名字,但我不知道后面的该如何作判断.

作者: chenhui530     时间: 2005-11-3 20:40
你把你要写的程序目的说下吧

作者: voiL     时间: 2005-11-4 12:11
我的两个新拍档对电脑方面的操作不是太熟练.

而我们的工作是需要到公司里其它的机子上取文件然后由我们来统计的.

十多台机子如果让他们两个一个一个地找的话,会浪费好多的时候.

而且统计好后,还得把文件放回原来的位置.

日常也有些文件需要发布到各个机子上的,我想做个批处理来实现这些烦琐的步骤.

一个是为了方面新拍档,同时自己也可学学东西.

但是费了一整天的劲,还没做出来,所以就上来请教了.

还有一点就是自己对于"for"命令还不太熟悉,想弄懂它是如果取得一串字符,然后根据这串字符作出判断的.

作者: chenhui530     时间: 2005-11-4 16:40
看了楼上说的还不太清楚具体的操作流程
比如你要在哪些机器上找资料或者你要操作的具体目的是什么啊
作判断很容易一个“IF”就行了啊

作者: voiL     时间: 2005-11-5 01:38
一时间我也很难把流程说得明白.

我只把我所需要的功能作个说明,希望chenhui530兄能看得明白.


我所需要的就是怎么用"IF"取得本机的机器名,然后又该如何去判断这机器名是否自己所需要的,如不是,那就不执行操作,直接结束程序;如是的话,那就进行下一步操作.

作者: voiL     时间: 2005-11-5 10:38
搞定了,其实很简单,之前跟着willsort版主的思路走,而自己对于"FOR"不熟悉,结果走了许多的弯路.不过还是很感谢他,因为他是第一个给我提供帮助的人.^_^


解决方法:
一个"SET"加一个"IF"就足矣...


@echo off
SET i=%USERDOMAIN%
if "%i%"=="MACHINE" goto Next
::MACHINE为机器名字(机器名字皆为大写,小写则会出错).
goto end

:Next
..........(代码省略)
goto end

:end
exit


Last edited by voiL on 2005-11-5 at 10:44 ]

作者: willsort     时间: 2005-11-5 12:19
Re voiL:

之所以没有给你太多的回复,是因为不太清楚你问题重点是什么,而我对你提到的网络共享的应用很陌生,所以无法给你提供更多的援助。现在看来,你需要了解的是变量的获取和判断,因此再作以下回复。

对于机器名变量,虽然大多数情况下,使用 %USERDOMAIN% 和 chenhui 兄提到的 %COMPUTERNAME% 是等效的,但是因为它们所应用的领域不同,可能会在某些情况下产生某些差别,这里我建议使用 %COMPUTERNAME% 更为准确和贴切一些。关于它们的定义如下:

%COMPUTERNAME%: Local Area Network name for this machine
%USERDOMAIN%: Specifies the network name for the domain of this machine

对你的代码中使用变量 %i% 表示不解,除非在你的代码中可能会对这个机器名进行修改,否则我认为应该可以直接使用机器名变量才对。而 MACHINE 必须大写,这源于 %USERDOMAIN% 的大写特征,不过也可以使用 if /i 进行忽略大小写的比较。例句如下:

if /i not "%comutername%"=="machine" goto end

:next
....

我所提到的 for 命令,是在你需要获取简单的机器名时才会使用,在你的应用中可能并不需要使用它。

Last edited by willsort on 2005-11-5 at 13:47 ]

作者: voiL     时间: 2005-11-5 13:40
多谢willsort版主提点.

由于自己水平有限,只能写出这样的句子了...

由于你之前提到的FOR,而我对这上命令又充满好奇...

一直都想搞明白它的用法,在网上苦寻了许久也找不到一篇好的文章(关于FOR的).

所以一直都照着你所给的提示去做.

2000年开始接触批处理,一直对它情有独钟.虽然现在有许多的软件可以帮人们完成大堆重复而烦琐的工作,但我还是钟情于自己写批处理完成它.

之前在DOSHOME也学过点东西,但因为水平问题,只能学些皮毛的东西.现想深入去学.习.

高手云集的DOS联盟就给我提供了一个学习的机会.

我很爱这里,从注册那天起,我每一天都会上来这里走走.目的都是想多学点东西.

最后,感谢全部给我提供过帮助的朋友.谢谢!