我正在写一个批处理文件,使用它的父目录(让我们说Folder1)中的一些文件。
C:UserSteveFoder1
现在我想让整个Folder_1可重定位,这样我就可以复制粘贴文件夹在我/别人的电脑上的任何地方,并运行批处理脚本。
D:UserRandom_guyFolder1
问题是我如何开始批处理文件的命令提示符(D:UserRandom_guyFolder1)它的父目录,而不编写另一个批处理脚本来做到这一点。
以:
开始批处理文件pushd %~dp0
将当前目录设置为包含批处理文件的文件夹。然后在批处理文件中,确保所有路径都是相对于当前目录的。
但是,如果您的批处理文件在执行过程中更改到其他目录,并且您仍然希望能够在不知道确切路径的情况下引用批处理主文件夹的内容,则使用相同的%~dp0
作为要使用的文件的路径。例如,来自与批处理文件相同文件夹的FileA
将被寻址为
"%~dp0FileA"
注意FileA
前面没有。这是因为
%~dp0
已经包含了一个末尾的,所以整个东西会计算出一个正确的路径。(虽然如果你放另一个反斜杠,像
"%~dp0FileA"
,它应该工作,因为Windows通常忽略多个连续的反斜杠时,在路径的中间)
%CD%在批处理文件中获取当前目录/批处理正在运行的目录
那么-如果我没弄错的话,你想运行
`C:stevefolder1yourbat.bat`
将C:stevesomefiles
复制到D:Random_guy
并将当前目录设置为D:Random_guyfolder1
?
@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
命令,您需要删除ECHO
关键字来执行它们。
使用参数D:Random_guy
运行批处理