Batch file 批处理从路径获取文件名

Batch file 批处理从路径获取文件名,batch-file,cygwin,Batch File,Cygwin,嗨,我在批处理编程方面没有太多经验,有一个问题。我有一个.bat脚本,它读取一个包含路径列表的文件,我想获取这些路径的文件名。我在cygwin中使用脚本。 脚本中的我的代码: for /F %%a in (error1.txt) do ( set value=%%a FOR /F %%I IN ("%value%") DO SET MYPATHFILE=%%~nxI ) 当我运行脚本时,%value%为空。 error1.txt的值: a/b/c/d/TextIWant 您需要延

嗨,我在批处理编程方面没有太多经验,有一个问题。我有一个
.bat
脚本,它读取一个包含路径列表的文件,我想获取这些路径的文件名。我在cygwin中使用脚本。 脚本中的我的代码:

for /F %%a in (error1.txt) do (
   set value=%%a
   FOR /F %%I IN ("%value%") DO SET MYPATHFILE=%%~nxI
)
当我运行脚本时,
%value%
为空。
error1.txt的值:

a/b/c/d/TextIWant

您需要延迟扩展,或者您可以直接使用%%a:

for /F %%a in (error1.txt) do (
   FOR /F %%I IN ("%%a") DO SET MYPATHFILE=%%~nxI
)


看起来您需要延迟扩展

当前的问题是,您希望在更改值的同一组括号中使用一个变量(循环的周围)

setlocal EnableDelayedExpansion
添加到顶部的代码中,并将
%value%
更改为
!价值

您可以使用以下代码自己测试问题:

@echo off
setlocal EnableDelayedExpansion
set foo=bar
For /L %%a (1,2,1) do (
set foo=foobar
echo.old value %foo%
echo.new value !foo!
)
我希望有帮助:)

问候


geisterfurz007

如何从MYPATHFILE中删除最后一个字符?
设置“MYPATHFILE=%MYPATHFILE:~0,-1%
,但您需要在for循环之外执行此操作。是否有可能在第二个循环中执行此操作?@仓鼠蓝-然后您需要使用delyaed扩展:
设置“MYPATHFILE=!”!MYPATHFILE:~0,-1!“
@echo off
setlocal EnableDelayedExpansion
set foo=bar
For /L %%a (1,2,1) do (
set foo=foobar
echo.old value %foo%
echo.new value !foo!
)