Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 删除批处理文件中的尾随\时出现问题_Batch File - Fatal编程技术网

Batch file 删除批处理文件中的尾随\时出现问题

Batch file 删除批处理文件中的尾随\时出现问题,batch-file,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:~

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

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分配给目录(不带驱动器号和尾随符)。它分配值,但当我试图去除尾随\时,该值为空


有人知道代码有什么问题吗?我相信这是一个简单的解决办法。我的头一直撞在这个屏幕上,现在从树上看不到树林。

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

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

因此,在代码中启用了延迟扩展,但是

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

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

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

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

MC,现在我明白我错在哪里了,非常感谢。福克斯,绕过我的问题的很酷的方式,但使用MC,因为我最终会得到一个For,一个For,一个For。。。非常感谢,这个网站上的第一个问题和这么多有用的提示。。。