我正在编写一个批处理文件,它使用它的父目录中的一些文件(比如说 Folder1)。
C:\User\Steve\Foder1\
现在我想让整个 Folder_1 可重定位,以便我可以将文件夹复制粘贴到我/其他人的计算机上的任何位置并运行批处理脚本。
D:\User\Random_guy\Folder1\
问题是如何在不编写另一个批处理脚本的情况下将批处理文件的命令提示符启动到 (D:\User\Random_guy\Folder1) 它的父目录。
我正在编写一个批处理文件,它使用它的父目录中的一些文件(比如说 Folder1)。
C:\User\Steve\Foder1\
现在我想让整个 Folder_1 可重定位,以便我可以将文件夹复制粘贴到我/其他人的计算机上的任何位置并运行批处理脚本。
D:\User\Random_guy\Folder1\
问题是如何在不编写另一个批处理脚本的情况下将批处理文件的命令提示符启动到 (D:\User\Random_guy\Folder1) 它的父目录。
使用以下命令启动批处理文件:
pushd %~dp0
这会将当前目录设置为包含批处理文件的文件夹。然后在批处理文件中,确保所有路径都相对于当前目录。
但是,如果您的批处理文件在执行过程中更改到其他目录,并且您仍然希望能够在不知道确切路径的情况下引用批处理的主文件夹的内容,请使用与%~dp0
文件路径相同的路径你想用。例如,FileA
与批处理文件来自同一文件夹的 a 将被寻址为
"%~dp0FileA"
注意.\
之前没有 a FileA
。这是因为%~dp0
已经包含一个尾随\
,因此整个事物将评估为正确的路径。(尽管如果您确实添加了另一个反斜杠,例如"%~dp0\FileA"
,它应该也可以工作,因为 Windows 通常会在路径中间忽略多个连续的反斜杠。)
批处理文件中的 %CD% 获取正在运行的当前目录/目录。
所以 - 如果我做对了,你想跑
`C:\steve\folder1\yourbat.bat`
应该复制C:\steve\somefiles
到哪个D:\Random_guy
并将当前目录设置为D:\Random_guy\folder1
?
@ECHO OFF
SETLOCAL
SET subdir=folder1
SET destdir=%~1
IF NOT DEFINED destdir ECHO Require destination username&GOTO :EOF
SET destdir=%~1\%subdir%
:: Ensure destination exists
ECHO MD "%destdir%" 2>nul
SET "sourcefrom=%~dp0.."
ECHO COPY "%sourcefrom%\filestocopy" "%destdir%\..\"
ECHO CD /d "%destdir%"
请注意MD
,COPY
和CD
命令只是ECHO
ed,您需要删除ECHO
关键字才能执行它们。
使用参数运行批处理D:\Random_guy