web-dev-qa-db-ja.com

Windows:変数-(入力:パス)をテキストファイルに保存する方法

変数をテキストファイルに保存しようとしていますが、失敗します:

_: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
Georg

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

2
It Wasn't Me

スペースは、setを含む一部のバッチステートメントで何かを意味します。見てください:

C:\>set /p a = b?
b?3

C:\>echo %a%
%a%

C:\>echo %a %
3
0
Michael Harvey