我想在文件的右键菜单中创建一个选项,以获取其文件名。我现在的问题是,如何在CMD中将文件名设置为值?
我尝试了这个:
@echo off
for /r %%f in (*.bat) do (
set w=%%~nxf
echo %w%
)
pause
但是w
运行后为空。
好吧,在我的系统上,我将描述您的批处理脚本的问题,但是我不知道为什么运行后您的w为空,但是如果您删除@echo,则可以看到发生了什么。从这个解释中,也许我们会明白为什么它是空的。它必须是w的最后一个设置,将其设置为空。
@echo off
for /r %%f in (*.bat) do (
set w=%%~nxf
echo %w%
)
pause
上面有一个问题,因为您正在%...%
for循环中使用,而%var%
在for循环中(例如%w%
在批处理文件中)发生的情况与任何其他语言相比都是非常奇怪的!在%w%
将得到由任何更换%w%
后的,然后不再。
您可以尝试通过执行set w = abcdefg来测试这一点,然后运行批处理文件,看看w是否仍然如此。
但是,我的机器上,它运行后集合w=%%~nxf
,然后你有呼应%w%
的是%w%
那里的回音,然后被设置为当前值%%~nxf
,这是你的第一个bat文件。就是这样。它保持这种方式。毫无疑问,这不是您想要的,但这就是发生的事情。
这是我删除@echo的蝙蝠文件。
for /r %%f in (*.bat) do (
set w=%%~nxf
echo %w%
)
这是显示发生了什么的输出,这就是我所描述的。%w%保持其第一个值。
C:\crp>spo <Return>
C:\crp>for /R %f in (*.bat) do (
set w=%~nxf
echo spo2.bat
)
C:\crp>(
set w=a.bat
echo spo2.bat
)
spo2.bat
C:\crp>(
set w=b.bat
echo spo2.bat
)
spo2.bat
C:\crp>(
set w=spo.bat
echo spo2.bat
)
spo2.bat
C:\crp>(
set w=spo2.bat
echo spo2.bat
)
spo2.bat
C:\crp>
您需要添加setlocal ....并将%var%替换为!var!那么您就会恢复正常行为!
@echo off
setlocal enableextensions enabledelayedexpansion
for /r %%f in (*.bat) do (
set w=%%~nxf
echo !w!
)
C:\crp>spo2
a.bat
b.bat
spo.bat
spo2.bat
C:\crp>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句