找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 24401|回复: 3

[文件操作] 为什么我的bat双击可执行,自启动则无法正常执行

[复制链接]
发表于 2014-1-28 14:29:14 | 显示全部楼层 |阅读模式
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. ::提取本地mac
  4. for /f "tokens=1-2 delims=:" %%a in ('ipconfig /all ^| findstr "Physical Address"') do (
  5. echo %%b>>localmac.txt
  6. )
  7. ::从mac主机名表中查找本地mac表中的对应信息并生成新文件
  8. findstr /g:localmac.txt machost.txt >>temp.txt
  9. ::判断此生成文件是否为空,不为空则提取相应的文字做主机名
  10. for /f "delims=" %%e in ('dir /b temp.txt') do (
  11. if %%~zi equ 0 (echo 大小为零 | pause) else (
  12. ::若找到与本机mac对应信息,则输出对应主机名
  13. for /f "tokens=1-2 delims= " %%m in (temp.txt) do (
  14. set name=%%m
  15. )
  16. )
  17. reg add "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\ComputerName\ComputerName" /v "ComputerName" /d "!name!" /f
  18. reg add "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v "NV Hostname" /d "!name!" /f
  19. reg add "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v "Hostname" /d "!name!" /f
  20. reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName" /v "ComputerName" /d "!name!" /f
  21. reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v "NV Hostname" /d "!name!" /f
  22. reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v "Hostname" /d "!name!" /f
复制代码
我做这个批处理的目的是提取本机mac地址并与machost.txt里面如下内容做对应
JSZX1-2 00-01-6C-51-A1-26
JSZX2-1 00-21-97-CE-6E-84
JSZX3 00-01-6C-51-9E-9C
JSZX6-1 74-27-EA-AE-98-86
已达到获取指定计算机名的目的.
为什么我的代码双击执行没问题,但想让系统自启动执行时会提示“FINDSTR: 无法打开machost.txt”
请各位高人指点!
 楼主| 发表于 2014-1-28 14:32:19 | 显示全部楼层
请注意 这个machost中每行都需要一个空格才行
发表于 2014-1-28 20:43:54 | 显示全部楼层
应该是自启动时%cd%不在bat所在目录,在最前面加一个cd /d "%~dp0"试试。

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2014-1-29 08:19:38 | 显示全部楼层
回复 3# weichenxiehou

感谢提示,就是这个原因,现在可以了。
顺便把查到的这个命令的详细解释摘录一下

意思是
更改当前目录为批处理本身的目录
有些晕吧?不急,我举例
比如你有个批处理a.bat在D:\qq文件夹下
a.bat内容为
cd /d %~dp0
在这里

cd /d 表示直接转换到后面的路径,否则如果切换盘符,就需要再输入盘符才能切换路径
cd /d %~dp0的意思就是cd /d d:\qq
%0代表批处理本身 d:\qq\a.bat
~dp是变量扩充
d既是扩充到分区号 d:
p就是扩充到路径 \qq
dp就是扩充到分区号路径 d:\qq
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 22:49 , Processed in 0.031387 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表