将批处理文件的目录更改为批处理文件的位置

时间:2017-11-07 18:55:50

标签: windows batch-file cmd

每周,我必须使用我们飞机的出版物更新我们的计算机。我通过创建一个批处理文件来简化流程,该文件自动删除旧的出版物并打开存储它们的文件夹,因此我不必深入挖掘它。每周存储出版物的位置是相同的。我的批处理文件如下所示......

del /s /f "C:\Users\Public\Desktop\PubFolder\Pub.pdf"

所以基本上我所要做的就是在运行批处理文件删除所有出版物后,将PubFolder从我的USB驱动器复制到公共桌面。

如果我们所有的计算机完全相同,这将是一个简单的解决方法,因为我可以在批处理文件中写入

xcopy /y D:\PubFolder" "C:\Users\Public\Desktop\PubFolder"

脚本将为我完成所有工作。我的问题是,许多计算机上安装了不同的软件,需要HDD中的分区。其中一些有3个,有些2个,有些1.

基本上我需要的是当我从USB运行批处理文件时,它使用批处理文件的位置作为目录,以便我可以从那里复制。

2 个答案:

答案 0 :(得分:1)

cmd脚本(.bat文件)可以使用%~dp0

引用自己的目录

使用FOR /?

查看详细信息

在您使用它时,一些额外的错误检查可能会使某些情况更容易从中恢复。

SETLOCAL
SET "EXITCODE=0"

SET "USERDIR=%PUBLIC%\Desktop\PubFolder"

IF NOT EXIST "%USERDIR%" (
    ECHO ERROR: The user publication directory "%USERDIR%" does not exist.
    SET EXITCODE=4
    GOTO TheEnd
)

IF EXIST "%USERDIR%\Pub.pdf" (DEL "%USERDIR%\Pub.pdf")

xcopy /y %~dp0PubFolder" "%USERDIR%"
SET "EXITCODE=%ERRORLEVEL%"
IF %EXITCODE% NEQ 0 (
    ECHO ERROR: Failed to copy from "%~dp0" to "%USERDIR%"
    SET EXITCODE=5
    GOTO TheEnd
)

:TheEnd
EXIT /B %EXITCODE%

答案 1 :(得分:0)

@setlocal
REM If you have pre-Vista machines, uncomment the folowing line:
REM @if not defined PUBLIC set PUBLIC=%SYSTEMDRIVE%\Users\Public%
@xcopy /y %~d0\PubFolder %PUBLIC%\Desktop\PubFolder