我正在尝试创建交互式bat文件,该文件要求获取用户选择的文件夹详细信息,但之后无法设置useri.e给出的文件夹路径。它只占用桌面的路径。下面是我的代码:
@echo off
set /p UserInfo= "Do you have abc software(y/n)? "
echo %UserInfo% // here it is working as expected
IF %UserInfo%==y (
echo "Reply is true-----"
set /p Path= "Please enter path for abc directory? "
echo %Path% //but here it takes the path till the desktop only(C:\user\username\Desktop)
CD %Path%
dir
set /p Path1= "Please enter path1 directory path provided in package? "
echo %Path1% //but here it takes the path till the desktop only(C:\user\username\Desktop)
CD %Path1%
)
IF %UserInfo%==n (
echo "Reply is False**************"
)
pause
如何阅读文件夹指令?
答案 0 :(得分:0)
嗯..请使用搜索栏作为用户Magoo,LotPings说。
此外,Stephan& Squashman提到,不设置名为path
的变量,因为有一个名为path
的内部变量。如果重命名,其他程序可能无法正常工作。
DelayedExpansion
?运行批处理文件时,cmd
逐行处理它们。整个if
语句立即得到处理。这就是变量未设置的原因。
由于我们希望cmd
在运行时处理这些变量,我们需要通过添加setlocal enableDelayedExpansion
告诉它这样做。这样可以实现运行时变量扩展。要停用,只需将enable
更改为disable
。
您可能需要像这样添加它:
@echo off
setlocal enableDelayedExpansion
rem your code follows...
只需将%var%
更改为!var!
即可。
请注意,for
循环元变量%%n
无法更改为!!n
,因为它本身已经暗示了延迟扩展。
命令行参数%n
无法更改为!n
。你可能想要这样做:
if "%var%"=="abc" (
set variable=%1
echo !variable!
)
SET /P
代码注入导致安全问题?!如果%Userinput%
的输入为a==a format D:\ && echo
,则cmd
会看到:
if a==a
do format D:\
do echo ==y (
哪个...格式化你的D盘。添加像if "%var%"=="abc"
这样的引号不会有帮助,因为用户可以转义引号并执行命令。
有关详细信息,请参阅here。
SET /P
替代您可能需要考虑CHOICE
单字母选择。它的命令语法是这样的:
choice /c choices /n /cs /t timeout /d default_choice /m prompt
==
不区分大小写。PATH
变量上面再次提到,PATH
是Windows和其他程序使用的内部变量。错误设置可能会导致某些Windows功能或程序无法正常运行。
相反,请使用其他变量名称,例如programPath
。