Javascript 为什么此脚本无法替换主机文件?
我们想更改我们正在添加到网站的移动PC的主机文件。然而,客户端对计算机不是很熟悉,这就是为什么我想创建一个批处理文件来为它们进行更新 这个想法是复制一份带有复制日期的原件。 -更新主机文件 由于处理win 10和win 7,我们发现有时我们无法直接更新主机文件,而不先复制它,然后覆盖原始文件。 因此,我认为可行的程序是这样的Javascript 为什么此脚本无法替换主机文件?,javascript,batch-file,hosts,Javascript,Batch File,Hosts,我们想更改我们正在添加到网站的移动PC的主机文件。然而,客户端对计算机不是很熟悉,这就是为什么我想创建一个批处理文件来为它们进行更新 这个想法是复制一份带有复制日期的原件。 -更新主机文件 由于处理win 10和win 7,我们发现有时我们无法直接更新主机文件,而不先复制它,然后覆盖原始文件。 因此,我认为可行的程序是这样的 原件复印件,注明复印日期 将主机复制到桌面 更新桌面上的主机文件 覆盖原始主机文件 成功或失败时的消息 你可以看到这个程序看起来并没有那么难,但是我遇到了一个由于特权错误而
::the copy to desktop command xcopy /s C:\Windows\System32\drivers\etc\hosts %userprofile%\desktop
::the update of hosts file
echo www.qpv-view.info xxx.xxx.xxx.xxx >hosts
::the date for the copied hosts file
@echo off
for /f "delims=" %%a in ('wmic OS Get localdatetime ^| find "."') do set dt=%%a
set YYYY=%dt:~0,4%
set MM=%dt:~4,2%
set DD=%dt:~6,2% set stamp=Oldhosts_%YYYY%%MM%%DD%
copy /y C:\Windows\System32\drivers\etc\hosts C:\Windows\System32\drivers\etc\%stamp%
::The override of the updated file
move /s/Y %userprofile%\desktop\hosts C:\Windows\System32\drivers\etc
end
当我启动时,拷贝工作正常。但是,更新部分需要提升的权限。
但是,如果我以提升的权限启动脚本,则不会进行复制。由于未定义
戳记,此行将通过自身复制主机文件:
copy /y C:\Windows\System32\drivers\etc\hosts C:\Windows\System32\drivers\etc\%stamp%
因为它相当于:
copy /y C:\Windows\System32\drivers\etc\hosts C:\Windows\System32\drivers\etc\
使用提升的权限时,您似乎无法复制到%userprofile%\desktop
因此,我只是将文件复制到drivers
文件夹中,一切正常
@echo off
for /f "delims=" %%a in ('wmic OS Get localdatetime ^| find "."') do set dt=%%a
set YYYY=%dt:~0,4%
set MM=%dt:~4,2%
set DD=%dt:~6,2%
set stamp=Oldhosts_%YYYY%%MM%%DD%
copy /y C:\Windows\System32\drivers\etc\hosts C:\Windows\System32\drivers\etc\%stamp%
copy /y C:\Windows\System32\drivers\etc\hosts C:\Windows\System32\drivers
echo www.qpv-view.info 172.16.10.60 >C:\Windows\System32\drivers\hosts
move /y C:\Windows\System32\drivers\hosts C:\Windows\System32\drivers\etc
pause
读和读<代码>结束
不是命令或标签<代码>:是对标签功能的滥用,最终会给您带来问题。改用rem
。如果希望脚本正确运行,则应提升脚本的运行级别。stamp
变量集在何时/何地?这是一个经典。您请求的是您实际上并不需要的帮助,因为您的代码在您似乎不理解的地方被破坏。我建议您不要尝试从脚本中提升。为了运行脚本,最终用户应该右键单击脚本并选择“以管理员身份运行”,尤其是当主机
位于受保护的系统目录结构中时。然后,您可以通过脚本开头的一行检查最终用户是否具有所需的权限:@“%\uuuuuu AppDir\uuuuuu%net.exe”会话>NUL 2>&1(回显退出…请右键单击此脚本并以管理员身份运行&Pause>NUL&Exit/B1)
我建议您将2
到6
的行替换为一行:@For/F“Tokens=1-3Delims=/“%%G In(“%\uu-AppDir\uuuuu%Robocopy.exe”\:/NJH/L |“%\uu-AppDir\uuu%find.exe”“123”)Do@Set“stamp=Oldhosts%%%H%%%H%%I”
。它应该运行得更快一点,同时将代码减少四行。