[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

  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”
请各位高人指点!

请注意 这个machost中每行都需要一个空格才行

TOP

应该是自启动时%cd%不在bat所在目录,在最前面加一个cd /d "%~dp0"试试。
1

评分人数

看得多说得多,远比不上写得多。

TOP

回复 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

TOP

返回列表