我在脚本中删除尾随\时遇到问题,我当前的脚本是:
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目录(没有驱动器号和尾部)。它赋值,但是当我试图摆脱尾随\时,该值为空。
有没有人知道代码有问题?我相信这是一个简单的解决方案。一直撞到这个屏幕,此刻看不到树上的树林。
答案 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