在批处理文件中删除Trailing \的问题

时间:2014-06-09 10:31:29

标签: batch-file

我在脚本中删除尾随\时遇到问题,我当前的脚本是:

echo on
setlocal enableextensions enabledelayedexpansion
SET SCRIPTFOLDER=C:\install$

FOR /F "tokens=* delims=," %%a in (%SCRIPTFOLDER%\GetFilesandFoldersFromHere.Txt) DO (
  set data.path=%%~pa
  SET data.path=%data.path:~0,-1%

  echo %data.path%
  rem echo file and folder= %%~na%%~xa Folder=%data.path%

)

GetFilesandFoldersFromHere.Txt文件包含文件和位置行,例如:

T:\First File Here\Move this File.txt

当我运行上面的代码时,我得到:

C:\install$\file Archive Scripts>(
set data.path=\First File Here\  
 rem If ~-1data.path:~0,0  
 SET data.path=~0,-1  
 echo   
 rem echo file and folder= Move this File.txt Folder= 

我想分配data.path目录(没有驱动器号和尾部)。它赋值,但是当我试图摆脱尾随\时,该值为空。

有没有人知道代码有问题?我相信这是一个简单的解决方案。一直撞到这个屏幕,此刻看不到树上的树林。

2 个答案:

答案 0 :(得分:0)

问题在于,当解析for代码块(括号中的代码)时,在开始执行之前,所有变量读取操作都将替换为变量中的值,并且在每次迭代中使用的是此初始值值,而不是执行期间存储在变量中的值。

如果更改代码块中的变量并需要访问同一代码块中的更改值,则需要启用延迟扩展(setlocal enabledelayedexpansion)并更改(必要时)要访问的语法要使用!varName!而不是%varName%的变量。这向解析器指示必须延迟此读操作。

因此,在您的代码中,您已启用延迟扩展,但

SET data.path=%data.path:~0,-1%
echo %data.path%

应该是

SET data.path=!data.path:~0,-1!
echo !data.path!

答案 1 :(得分:0)

这是一个删除尾部反斜杠的技巧

@echo off
set "folder=c:\data\"
for %%a in ("%folder%\.") do set "folder=%%~dpnxa"
set fold
pause