我正在编写一个批处理文件,该文件使用其父目录中的一些文件(比如说Folder1)。
C:\User\Steve\Foder1\
现在我想让整个Folder_1可重定位,以便我可以将文件夹复制粘贴到我/他人的计算机上的任何位置并运行批处理脚本。
D:\User\Random_guy\Folder1\
问题是我如何启动批处理文件的命令提示符(D:\ User \ Random_guy \ Folder1)它的父目录而不编写另一个批处理脚本来执行此操作。
答案 0 :(得分:5)
使用以下命令启动批处理文件:
pushd %~dp0
这会将当前目录设置为包含批处理文件的文件夹。然后在批处理文件中,确保所有路径都相对于当前目录。
但是,如果您的批处理文件在执行过程中更改为其他目录,并且您仍希望能够在不知道确切路径的情况下引用批处理的主文件夹的内容,请使用相同的%~dp0
作为要使用的文件的路径。例如,与批处理文件相同的文件夹中的FileA
将作为
"%~dp0FileA"
请注意\
之前缺少FileA
。这是因为%~dp0
已经包含尾随\
,因此整个事情将评估为正确的路径。 (虽然如果你确实添加了另一个反斜杠,比如"%~dp0\FileA"
,它也可以正常工作,因为Windows通常会在路径中间忽略多个连续的反斜杠。)
答案 1 :(得分:0)
%CD%获取正在运行的当前目录/目录批处理。
答案 2 :(得分:0)
所以 - 如果我做对了,你想运行
`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
,您需要删除ECHO
关键字才能执行它们。
使用参数D:\Random_guy