【问题标题】:batch file to check existance of directory if not exists then use alternate directory for file copy批处理文件检查目录是否存在,如果不存在,则使用备用目录进行文件复制
【发布时间】:2013-07-10 22:37:30
【问题描述】:

我正在尝试编写一个批处理文件,将 exe 文件从网络位置复制到本地位置。它目前可以工作,但根据 Windows 版本(xp 或 win7),由于复制所需的本地路径不同,用户必须选择正确的 .bat 文件。 (每次用户启动机器时,它们都会进入要运行的启动文件夹)。这是我第一次编写批处理文件,在查看 if 语句的语法时完全迷失了方向。如果我能得到一些帮助来解决这个问题,那就太好了。

这是我目前拥有的适用于 XP 的内容:

    REM @ECHO OFF

    ECHO STARTING MOVEFILES

    SET EXITRC=0
    SET EXITMSG=EXITRC INITIALIZED
    ECHO %EXITRC% -- %EXITMS

    COPY "\\networkDrive\install\Individual\program\MOVEFILES.EXE" "C:\DOCUMENTS AND SETTINGS\ALL USERS\START MENU\PROGRAMS\STARTUP\"

    ECHO COPIED FILES TO YOUR PC  
    SET EXITRC=%ERRORLEVEL%
    IF NOT %EXITRC% == 0 GOTO :EXIT

    SET EXITMSG=PROCESSING COMPLETE

    :EXIT 
    ECHO STEP: %EXITMSG%  RC: %EXITRC%
    ECHO FINISHING MOVEFILES 
    PAUSE

    EXIT %EXITRC%

这是我为 Windows 7 准备的:

    @ECHO OFF

    ECHO STARTING MOVEFILESWIN7

    SET EXITRC=0
    SET EXITMSG=EXITRC INITIALIZED
    ECHO %EXITRC% -- %EXITMS

    COPY "\\networkDrive\install\Individual\program\MOVEFILES.exe" "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup"

    ECHO COPIED MOVEFILESWIN7 TO YOUR PC - All Users / Public Startup folder
    SET EXITRC=%ERRORLEVEL%
    IF NOT %EXITRC% == 0 GOTO :EXIT

    SET EXITMSG=PROCESSING COMPLETE

    :EXIT 
    ECHO STEP: %EXITMSG%  RC: %EXITRC%
    ECHO FINISHING MOVEFILESWIN7 

    PAUSE
    EXIT %EXITRC%

我希望只有一个批处理文件可以涵盖这两种情况,这样用户就不会混淆要运行哪个批处理文件。

【问题讨论】:

  • 顺便说一句,如果您使用小写字母,则 更容易阅读批处理脚本。脚本不区分大小写,所以没关系。只需对环境变量或其他关键字(如 NOT)使用全大写。
  • 很高兴知道!谢谢!我现在将在我的代码中更改它。我仍在试图弄清楚如何将复制语句放入 if 语句中。例如:IF(win7目录存在)拷贝到win7目录;否则复制到XP目录。或者类似的东西。
  • 为什么会被否决?如果您觉得这个问题有帮助,请对问题投赞成票,但不要在没有留下评论或改进建议的情况下投反对票。这是非建设性的。

标签: if-statement batch-file directory copy errorlevel


【解决方案1】:

您可以使用环境变量%ALLUSERSPROFILE%

在 WinXP 上,默认值为 C:\Documents and Settings\All Users

在 Win7/2008 上,默认值为 C:\ProgramData

这里有一张桌子:http://ss64.com/nt/syntax-variables.html

我看到您还复制了一个不同的文件。不知道你为什么这样做。也许您可以在这里使用一种方法进行检测:https://stackoverflow.com/a/2788764/1553090 -- 否则也许您应该利用 %ProgramFiles%%ProgramFiles(x86)% 变量。

只是详细说明如何选择使用这些变量...您可以测试 Win7 启动文件夹是否存在,如果不存在则回退到 XP(不管它是否存在)。

set STARTUP_WIN7=%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\Startup
set STARTUP_WINXP=%ALLUSERSPROFILE%\Start Menu\Programs\Startup

if EXIST "%STARTUP_WIN7%" (
    set STARTUP=%STARTUP_WIN7%
) else (
    set STARTUP=%STARTUP_WINXP%
)

【讨论】:

  • 感谢您的回复。我不是想弄清楚要复制到哪里……我已经知道他们需要去哪里。我试图找出条件语句,该语句将根据目录路径是否存在或 OSVersion 确定使用哪个路径(不确定后者是否可以批量处理)。例如:IF(win7目录存在)拷贝到win7目录;否则复制到XP目录。或者类似的东西
  • %ALLUSERSPROFILE% 也对我没有帮助。到启动文件夹后的文件路径还是不一样。
  • 它应该有帮助,你只需要额外的推动。我已经编辑了我的答案,以展示您可以使用它的一种方式。你可以在这个主题上做一些变化,这取决于你想变得多么迂腐。 =)
猜你喜欢
  • 2015-07-09
  • 1970-01-01
  • 1970-01-01
  • 2018-12-08
  • 2018-10-28
  • 2012-05-17
  • 2014-03-06
  • 2017-03-15
  • 1970-01-01
相关资源
最近更新 更多