変数をテキストファイルに保存しようとしていますが、失敗します:
_: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
変数を文字列に変更すると、機能します。何が問題ですか ?
set /p
でdobblequotesを使用し、dir /a-a
を演算子&&
および||
for to goto :label A or B
とともに使用して、入力がフォルダーであるかどうかも確認します。
ユーザーがファイルを報告した場合、存在する場合はTrueを返すことができ、フォルダーからの入力が確実に渡されるようにします。
echo\ input>...
コマンドの場合、「dobblequotes」を使用して、ユーザーが&
、|
などを入力した場合に発生する可能性のあるエラーを回避することもできます。誤って保存する必要がある場合は、>>
を>
に置き換えてください。
Obs.:以下にリンクされている条件付き実行を参照してください!
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
を返すため、演算子0
の後のコマンドがアクションを実行します。
また、ユーザーがパス/フォルダー入力に% cd%\Folder_X
、%temp%\SubFolder_Y
などの変数を入力すると、変数は正しく設定され、call
コマンドを使用して%userinputpath%
に保存されます。
変数をファイルに保存するには、追加(>>
)または上書き(>
)して、入力がフォルダーであることを確認した後、そのままにして、入力で提供された変数を正しく保存します。
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
さらに読む:
[√]セット
スペースは、set
を含む一部のバッチステートメントで何かを意味します。見てください:
C:\>set /p a = b?
b?3
C:\>echo %a%
%a%
C:\>echo %a %
3