使用批处理脚本向上移动文件夹时遇到问题

问题描述 投票:0回答:1

我是批处理脚本的新手。我的 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
batch-file command-line batch-processing
1个回答
0
投票
:: 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"
  • 实际上并不需要引号,但这符合“引用所有包含分隔符的字符串”的原则
© www.soinside.com 2019 - 2024. All rights reserved.