我是批处理脚本的新手。我的 bat 文件位于路径中,我需要移动到上面的一个文件夹,但我尝试了多种方法来向上移动文件夹,但仍然位于同一个文件夹中。
我为每次尝试添加了输出。不确定每个命令有什么问题,我无法向上移动一个文件夹。
请告诉我向上移动一个文件夹的命令,例如
c:\workspace\Local\TestA
并导航到 c:\workspace\Local\TestA\Folder2
current bat Directory : c:\workspace\Local\TestA\Folder1\test.bat
Expected directory to be moved c:\workspace\Local\TestA\
Directory structure: c:\workspace\Local\TestA\Folder1
c:\workspace\Local\TestA\Folder2
@echo ON
setlocal
:: First Try
set SRC_DIR=%~dp0
@echo %SRC_DIR%
:: Output c:\workspace\Local\TestA\Folder1
:: Second Try
@echo %SRC_DIR%..
:: Output c:\workspace\Local\TestA\Folder1..
:: Third Try
set SRC_DIR = %CD%..
@echo %SRC_DIR%
:: Output c:\workspace\Local\TestA\Folder1..
::Fourth Try
set SRC_DIR_1=%~dp0..
@echo %SRC_DIR_1%
:: Output c:\workspace\Local\TestA\Folder1..
::Fifth Try
set FOLDER2_DIR_1 = %SRC_DIR%Folder2
@echo %FOLDER2_DIR_1%
:: Output c:\workspace\Local\TestA\Folder1\Folder2
::Sixth
@echo Current Directory = %CD%
:: Output c:\workspace\Local\TestA\Folder1
:: Revert back to the previous Working Directory
popd
set FOLDER2_DIR_2= %SRC_DIR%Folder2
@echo %FOLDER2_DIR_2%
:: Output c:\workspace\Local\TestA\Folder1\Folder2
:: Changing the path
%cd% %FOLDER2_DIR_1%
@echo Current Folder2 Directory = %CD%
:: Output c:\workspace\Local\TestA\Folder1\Folder2
pushd "%FOLDER2_DIR_1%"
@echo Current Directory with pushd command = %CD%
:: Output c:\workspace\Local\TestA\Folder1\Folder2
:: First Try
set SRC_DIR=%~dp0
@echo %SRC_DIR%
:: Output c:\workspace\Local\TestA\Folder1
事实并非如此。输出应该是
c:\workspace\Local\TestA\Folder1\
:: Second Try
@echo %SRC_DIR%..
:: Output c:\workspace\Local\TestA\Folder1..
再说一次,情况并非如此。输出应该是
c:\workspace\Local\TestA\Folder1\..
:: Third Try
set SRC_DIR = %CD%..
@echo %SRC_DIR%
:: Output c:\workspace\Local\TestA\Folder1..
Batch 对普通字符串
SET
语句中的空格敏感。 SET FLAG = N
将名为“FLAGSpace”的变量设置为值“SpaceN”。从=
的两侧删除空格。
您设置了一个新变量
SRC_DIR
(注意终端Space),但显示了SRC_DIR
的值(注意NO终端Space)。
使用
set "var=value"
设置字符串值 - 这可以避免尾随空格引起的问题。不要分配 "
或终端反斜杠或空格。从元素构建路径名 - 与直觉相反,它可能会使过程变得更容易。如果使用语法 set var="value"
,则引号将成为分配值的一部分。
::Fourth Try
set SRC_DIR_1=%~dp0..
@echo %SRC_DIR_1%
:: Output c:\workspace\Local\TestA\Folder1..
再次,在
..
之前缺少反斜杠
::Fifth Try
set FOLDER2_DIR_1 = %SRC_DIR%Folder2
@echo %FOLDER2_DIR_1%
:: Output c:\workspace\Local\TestA\Folder1\Folder2
事实并非如此 - 变量
FOLDER2_DIR_1
未设置,FOLDER2_DIR_1
已设置。回复是ECHO is on.
::Sixth
@echo Current Directory = %CD%
:: Output c:\workspace\Local\TestA\Folder1
:: Revert back to the previous Working Directory
popd
嗯,这有效 - 请注意,
%cd%
not 有终端反斜杠。
popd
无效,因为没有先前的 pushd
。
set FOLDER2_DIR_2= %SRC_DIR%Folder2
@echo %FOLDER2_DIR_2%
:: Output c:\workspace\Local\TestA\Folder1\Folder2
小心!请注意,
FOLDER2_DIR_2
的值会有一个前导空格。
提示:显示多个测试结果时,请尝试在显示中添加测试编号,以便于区分。在字符串的开头和结尾显示一个明显的字符(例如
echo 6a +%FOLDER2_DIR_2%+
),它显示变量值中的步骤和任何前导/尾随空格。
:: Changing the path
%cd% %FOLDER2_DIR_1%
@echo Current Folder2 Directory = %CD%
:: Output c:\workspace\Local\TestA\Folder1\Folder2
嗯,不。
这将执行
c:\workspace\Local\TestA\Folder1 c:\workspace\Local\TestA\Folder1\Folder2
,这将导致语法错误消息
'c:\workspace\Local\TestA\Folder1' is not recognized as an internal or external command,
operable program or batch file.
这应该是
cd %FOLDER2_DIR_1%
更改为
c:\workspace\Local\TestA\Folder1\Folder2
您可能想要的命令是
cd %SRC_DIR%\..\Folder2
将被评估为:
%SRC_DIR% The starting dir
\.. Its parent
\Folder2 This directory from the parent.
就个人而言,我会使用
cd "%SRC_DIR%\..\Folder2"