.bat 包含在 .bat 中,无法运行 - 您该怎么做?

.bat 包含在 .bat 中,无法运行 - 您该怎么做?

我收到警告说这是一个过于“主观”的问题,但我真的找不到另一种方式在像标题一样短的文字中表达这一点,所以我很抱歉......任何关于标题的建议都会受到赞赏。

所以回到我的问题,昨天我试图编写一些代码但失败了,就这么简单......经过几个小时寻找问题,我仍然找不到它:所以希望找到解决方案,我想问,你会怎么做?

目标:

F:\ 目录中有一个名为 a.bat 的文件,单击后需要将其移动到 C:\Users 目录,由于移动操作会破坏文件,因此移动后需要从 C:\Users 目录重新启动。所以我们需要在批处理中编写批处理,对吗?

单击 a.bat 时会形成一个文件,执行移动操作,并在移动完成后启动 a.bat。现在我似乎无法做到这一点,代码根本不起作用。它创建了一个 CMD 循环,迫使我重新启动计算机,尽管这看起来像是一项简单的任务——是的,我确实这样做了 if %cd% == C:\Users goto z,如果文件已经位于该目录中,它将跳过创建执行移动的批处理。

答案1

如果我理解了这个问题你可以尝试这样的事情:

@ECHO OFF

:: If the script is not running under "C:\Users" it will copy
:: itself there and then execute that copy which will remove
:: this copy (ie. the copy in F:\) and then perform the normal
::script operations.

IF /I NOT "%~dp0"=="C:\Users\" (
  IF NOT EXIST "C:\Users\%~nx0" COPY "%~0" C:\Users
  IF EXIST "C:\Users\%~nx0" (
    "C:\Users\%~nx0" "%~0"
    GOTO END
  ) ELSE (
    ECHO.
    ECHO Unable to copy the script to "C:\Users".
    ECHO.
    ECHO Ensure you are running the script as an administrator and try again.
    ECHO.
    ECHO Press any key to close this window ...
    PAUSE > NUL
    GOTO END
  )
)


:: The first parameter of the script (%~1) is the path to the old
:: location of the script that needs to be removed.  The parameter
:: is used recursively (above) whenever the script is executed from
:: a location other than "C:\Users".

IF NOT "%~1"=="" IF EXIST "%~1" DEL /F "%~1"


::
:: Put your script code here
::

:END

笔记:
批处理文件必须以管理员身份运行才能在 C:\Users 中创建副本,除非 C:\Users 的权限已更改为允许标准用户写入该文件夹。

答案2

您无需移动 .bat 文件。只需调用cd即可更改批处理实例的目录。创建一个包含以下内容的新 .bat 文件,然后从任意位置运行它。

cd C:\Users
dir
pause

该文件应输出 C:\Users 中的文件和目录

相关内容