我收到警告说这是一个过于“主观”的问题,但我真的找不到另一种方式在像标题一样短的文字中表达这一点,所以我很抱歉......任何关于标题的建议都会受到赞赏。
所以回到我的问题,昨天我试图编写一些代码但失败了,就这么简单......经过几个小时寻找问题,我仍然找不到它:所以希望找到解决方案,我想问,你会怎么做?
目标:
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 中的文件和目录