Javascript 为什么此脚本无法替换主机文件?

Javascript 为什么此脚本无法替换主机文件?,javascript,batch-file,hosts,Javascript,Batch File,Hosts,我们想更改我们正在添加到网站的移动PC的主机文件。然而,客户端对计算机不是很熟悉,这就是为什么我想创建一个批处理文件来为它们进行更新 这个想法是复制一份带有复制日期的原件。 -更新主机文件 由于处理win 10和win 7,我们发现有时我们无法直接更新主机文件,而不先复制它,然后覆盖原始文件。 因此,我认为可行的程序是这样的 原件复印件,注明复印日期 将主机复制到桌面 更新桌面上的主机文件 覆盖原始主机文件 成功或失败时的消息 你可以看到这个程序看起来并没有那么难,但是我遇到了一个由于特权错误而

我们想更改我们正在添加到网站的移动PC的主机文件。然而,客户端对计算机不是很熟悉,这就是为什么我想创建一个批处理文件来为它们进行更新

这个想法是复制一份带有复制日期的原件。 -更新主机文件

由于处理win 10和win 7,我们发现有时我们无法直接更新主机文件,而不先复制它,然后覆盖原始文件。 因此,我认为可行的程序是这样的

  • 原件复印件,注明复印日期
  • 将主机复制到桌面
  • 更新桌面上的主机文件
  • 覆盖原始主机文件
  • 成功或失败时的消息
  • 你可以看到这个程序看起来并没有那么难,但是我遇到了一个由于特权错误而导致的错误。 因此,由于我们的客户没有足够的知识,我想尝试通过批处理文件来提升它

    我在这里搜索并找到了一个帖子“”。 但不幸的是,我的VBS和批处理知识没有那么高,我希望有人能帮我破译它

    我创建的代码是:

    ::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”
    。它应该运行得更快一点,同时将代码减少四行。