Windows 将批处理文件的目录更改为批处理文件';s位置

Windows 将批处理文件的目录更改为批处理文件';s位置,windows,batch-file,cmd,Windows,Batch File,Cmd,每周,我都要用我们飞机的出版物更新我们的电脑。我创建了一个批处理文件,自动删除旧出版物,并打开存储它们的文件夹,从而简化了这个过程,这样我就不必去挖掘。每周存储出版物的位置相同。我的批处理文件如下所示 del /s /f "C:\Users\Public\Desktop\PubFolder\Pub.pdf" 因此,基本上我所要做的就是在运行批处理文件删除所有出版物后,将PubFolder从USB驱动器复制到公共桌面 如果我们所有的计算机都完全相同,这将是一个简单的修复,因为我可以在批处理文件中

每周,我都要用我们飞机的出版物更新我们的电脑。我创建了一个批处理文件,自动删除旧出版物,并打开存储它们的文件夹,从而简化了这个过程,这样我就不必去挖掘。每周存储出版物的位置相同。我的批处理文件如下所示

del /s /f "C:\Users\Public\Desktop\PubFolder\Pub.pdf"
因此,基本上我所要做的就是在运行批处理文件删除所有出版物后,将PubFolder从USB驱动器复制到公共桌面

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

xcopy /y D:\PubFolder" "C:\Users\Public\Desktop\PubFolder"
剧本会帮我完成所有的工作。我的问题是,许多计算机上安装了不同的软件,这些软件需要硬盘中的分区。有些有3个,有些有2个,有些有1个

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

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

@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
请使用
查看详细信息以获取/?

当您进行此操作时,一些额外的错误检查可能会使某些情况更容易恢复

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)!但是,如果您要解决所有这些问题,为什么不同时讨论用户配置文件数据不在%SYSTEMDRIVE%上的情况呢?在系统>=Win8上使用%PUBLIC%。谢谢@jwdonahue。修改为使用公共环境变量。OP可能想要,也可能不想要。