处理批处理文件中带有空格的尾随反斜杠和目录名称

2023-12-24

这是这个问题的变体:从批处理文件输入中删除尾部斜杠 https://stackoverflow.com/questions/2952401/remove-trailing-slash-from-batch-file-input

但它有微妙的不同,所以我不认为这是一个骗局。

我在使用包含空格的目录(运行 WinXP)时遇到问题。

:START
@echo What folder do you want to process? (Provide a path without a closing backslash)
set /p datapath=

::Is string empty?
IF X%datapath% == X GOTO:START

::Does string have a trailing slash? if so remove it 
IF %datapath:~-1%==\ SET datapath=%datapath:~0,-1%

echo %datapath%

它处理:

c:\

正确地(将其剥离到 c:)

但如果你输入:

c:\test space

错误是“此时出现意外的空间”。

如果您尝试输入:

"c:\test space"

你会得到同样的错误。

我认为这将涉及在这一行中战略性地放置一两个“:

IF %datapath:~-1%==\ SET datapath=%datapath:~0,-1%

但我没有任何运气。

有任何想法吗?


您可以通过延迟扩展来解决它,因为延迟扩展的工作方式与百分比扩展不同。

:START
setlocal EnableDelayedExpansion
@echo What folder do you want to process? (Provide a path without a closing backslash)
set /p datapath=

::Is string empty?
IF X!datapath! == X GOTO:START

::Does string have a trailing slash? if so remove it 
IF !datapath:~-1!==\ SET "datapath=!datapath:~0,-1!"

echo !datapath!

它的扩展晚于percent扩展,并且在延迟扩展之后不再进行解析,因此即使空格或特殊字符也会产生任何影响。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

处理批处理文件中带有空格的尾随反斜杠和目录名称 的相关文章

  • Mercurial/extdiff 没有更改为临时目录(正如我认为应该的那样)

    使用 Windows Mercurial 和 extdiff 扩展 适用于 Mercurial 我试图设置 extdiff 以使用 WinDiff 作为外部比较工具 但我认为我已经将问题范围缩小到足以说明问题在我还没有做到这一点之前 根据我
  • 找到第一个命中后停止 DIR 命令搜索

    在 CMD EXE 中我可以使用以下命令搜索某些内容DIR 以下面的例子为例 DIR C EXCEL EXE A D B S 虽然需要一段时间才能看清C 盘的整个结构 但是第一次匹配还是比较快的 Q 有没有办法自动地一旦发现命中 就停止命令
  • 如何使用 winrar 提取与 zip 文件同名的文件夹中的所有 zip 文件?

    我需要迭代一个文件夹 对于每个 zip 文件 我需要使用它的名称来提取它 也就是说 如果它是 test zip 那么它应该解压到 test 文件夹 同样 它应该迭代我的文件夹及其子文件夹并提取内容 我编写了下面的代码 但它没有使用 zip
  • REG ADD - 语法无效

    我试图通过在批处理文件中使用以下代码行来修改注册表中的值 但当我在参数周围使用双引号时 我不断收到 错误 语法无效 而当我使用单引号时 我不断收到 无效的键名 REG ADD HKLM SOFTWARE Microsoft Windows
  • 我应该如何传递密码(包含特殊字符)作为命令行参数?

    我有一个部署脚本 必须将 LDAP 密码作为命令参数传递给该脚本 实际密码 foo ser ver 1 包含三个空格字符 开头 之前1 之后1 e g bin gt deployment bat LDAPPassword foo ser v
  • 如何获取%CD%的父路径

    如何获取当前 CD 的父路径 例如 ECHO CD result C Windows System32 这不起作用 ECHO CD 期望的结果 C Windows 尝试更改当前目录 然后使用 cd pushd echo cd popd
  • 从目录获取第一个文件名的批处理脚本

    我的函数需要特定目录中的第一个文件名来使用第一个文件处理一些测试 完成测试后从目录中删除第一个文件 我尝试如下 FOR R
  • 批处理文件搜索与本地文件同名的文件夹并将所述文件移动到找到的文件夹不起作用

    因此 我尝试创建一个批处理文件 该文件将在与批处理文件相同的目录中获取 pdf 文件并输出文件名 无扩展名 我使用这段代码来完成此任务 echo off for r C Users me Test Folder G in pdf do se
  • 批处理:在带有管道的 for 循环中执行带引号的命令来查找

    您能否建议如何修复下面的命令 该命令会从 svn 中删除未版本控制的项目 rem echo off for f tokens 2 i in c Program Files TortoiseSVN bin svn exe status no
  • 使用脚本查找字符串长度的奇怪结果?

    我正在测试 unmeat 提交的这段代码这个问题 https stackoverflow com questions 21817684 batch get string length with special characters 肉叔叔引
  • 2 批字符串问题

    1 是否有任何内置函数可以告诉我变量的内容是否仅包含大写字母 2 有没有办法查看变量是否包含字符串 例如 我想查看变量 PATH 是否包含 Ruby 对于第 1 部分 findstr就是答案 您只需使用正则表达式功能即可errorlevel
  • 排除批复制脚本中的文件夹

    我正在使用 U 盘上的批处理文件来备份我的照片 我使用以下命令 for r C x in jpg png gif do copy y x 我想排除邮件文件夹 WINDOWS 和 PROGRAM FILES 中的文件 有谁知道如何使用批处理文
  • 批处理文件 FOR /f 标记

    任何人都可以逐行准确解释以下代码是如何工作的 我真的迷路了 我一直在尝试学习如何使用 FOR 命令 但我不明白这一点 echo off for f tokens delims f in myfile do set line f call p
  • 如何将 GIT 调用的输出获取到批处理脚本中的变量中?

    我有一个 git 命令来获取当前存储库的最新 SHA 如下所示 git log pretty format H n 1 我有一个 Windows 批处理脚本 我想按如下方式使用它 SET CURRENT SHA 但我不知道如何将从 git
  • 备份并上传到FTP服务器[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 谁能指导我一个脚本解决方案来备份目录并将其上传到 ftp 服务器 我最初正在寻找批处理脚本 但任何解决
  • 如何从 .bat 运行 .vbs

    创建了一个广泛的批处理脚本程序来处理一些自动文件管理和打印 我需要调用一个 vbs 文件来执行它的 sendkeys 操作 有没有办法在不冻结程序的情况下完成此任务 我试过了START WAIT my vbs并且脚本在进入 vbs 时冻结
  • 如何找到批处理文件的当前目录,然后将其用作路径?

    我有一个批处理文件 打算分发给我们的客户以运行软件任务 我们将它们作为文件夹分发或 zip以及里面的文件 里面有批处理文件和另一个文件夹 其中包含运行批处理所需的文件 通常 当您进行批处理时 您可以键入文件所在的路径 但我不知道文件在哪里
  • 使用标准用户帐户在提升的脚本中获取登录用户名

    在 Windows 7 中运行的批处理脚本中 我有几个 IF 子句 例如 IF USERNAME foo GOTO bar 不幸的是 当我运行这个批处理脚本时 用 以管理员身份运行 从上下文菜单中 USERNAME 始终是管理员的用户名 而
  • 创建一个批处理文件来打开 Firefox,然后运行一个宏(等待它完成),然后运行另一个宏

    我在尝试着 1 加载火狐浏览器 2 运行 Iopus Imacro iim 等待完成 然后 3 运行下一个宏 到目前为止 我已经尝试过 start wait call 以及我在互联网上可以找到的许多其他建议 这就是我到目前为止所拥有的 运行
  • 如何在每个批处理脚本运行后清除变量?

    看来 由于我使用 SET 在批处理脚本中声明变量 如果我在 cmd 中运行多次 变量值将持续存在 除非我显式重置它们 我是否必须使用 setlocal 和 endlocal 来确保一次运行中的变量不会在不关闭 CMD 的情况下持续到另一次运

随机推荐