我正在尝试将变量保存到文本文件,但失败了:
:folder
echo. && echo Where is your folder ?
set /p userinputpath = Type input[Drive][Path]:
echo "%userinputpath%" >> folder.txt
IF EXIST "%userinputpath%" (goto checkexe) REM goto check .exe
echo Incorrect input & goto folder
尝试保存userinputpath
变量->输入如下所示:C:\Program Files (x86)\Subfolder\Subfolder
如果我将变量更改为字符串,它就可以正常工作。问题是什么?
答案1
我会在 中使用双引号,并通过使用with 运算符和for 来set /p
检查输入是否为文件夹dir /a-a
&&
||
goto :label A or B
如果存在,则可以在用户报告文件的情况下返回 True,以确保从文件夹传递输入。
对于echo\ input>...
命令,您还可以使用“dobblequotes”来避免用户输入类似&
、|
或其他内容时可能出现的任何潜在错误,即使是意外的,如果您需要一次保存一个,请将其替换>>
为>
。
观察:请参阅下面链接的条件执行!
echo\ variable >> == strings output will be append to file
echo\ variable > == overwrite string output to file (replace all content)
:folder
echo; & echo;Where is your folder?
set /p "userinputpath=Type input[Drive][Path]: "
dir /b/a-a "%userinputpath%" >nul 2>nul && (
echo;"%userinputpath%">"%temp%\folder.txt" & goto :checkexe
) || set /p "'=Incorrect input!"<nul & set "userinputpath="
timeout -1 & echo; & goto :folder
:checkexe
但是,如果用户(总是这个人)只是输入,会发生什么enter/retunr
?或者,突然选择使用变量作为输入文件夹?
- 像
%temp%
,,,,等等...%windir%
%userprofile%
%appdata%
在这种假定的潜在情况下,在对您的代码进行最少更改的情况下,我将尝试:
@echo off
:folder
echo; & echo;Where is your folder?
set /p "userinputpath=Type input[Drive][Path]: " || goto :folder
<con: call dir/b/a-a "%userinputpath%\*" 2>nul >nul && (
call echo;"%userinputpath%">"%temp%\folder.txt" & goto :checkexe
) || ( set /p "'=Incorrect input!"<nul && set "userinputpath=" <nul
timeout -1 & goto :folder
)
:checkexe
如果用户只点击enter/return
命令set /p "userinputpath=Type input[Drive][Path]: "
,则不会执行该命令,而是||
在这种情况下,运算符后的命令将采取行动,因为set /p
返回 non 0
。
并且,如果用户为路径/文件夹输入任何变量,例如% cd%\Folder_X
,%temp%\SubFolder_Y
等等,则变量将被正确设置并%userinputpath%
使用该call
命令保存。
要将变量保存在文件中,请附加(>>
)或覆盖(>
),在检查输入是一个文件夹后再完成,从而保存输入中正确提供的变量:
First check if path/input is a folder:
<con: call dir/b/a-a "%userinputpath%\*" 2>nul >nul && (
After that, save this folder to your file:
call echo;"%userinputpath%">"%temp%\folder.txt" & goto :checkexe
- 进一步阅读:
[√]放