あなたの主な間違いは、環境変数input
にバッチファイルをユーザーが入力した文字列を割り当てるが、コマンドcopy
上のすべてで定義されていないため、%data%
は、コマンドラインの実行前に二度交換される環境変数data
を参照しています何もない。
このバッチコードはどうですか?
@echo off
rem The next 2 commands are commented out as not needed for this task.
rem cd \
rem dir /s *.doc *.docx *.xlsx *.ppt
setlocal EnableExtensions EnableDelayedExpansion
:UserPrompt
echo/
echo Enter the file name with complete path or drag and drop
echo the file to copy from Windows Explorer over this window.
echo/
set "FileName=""
set /p "FileName=Enter file name: "
echo/
rem Remove all double quotes from entered string.
set "FileName=!FileName:"=!"
rem Has the user entered any file name at all?
if "!FileName!" == "" goto UserPrompt
rem Does the file really exist?
if exist "!FileName!" goto CopyFile
echo Error: The specified file does not exist.
echo/
goto UserPrompt
:CopyFile
copy "!FileName!" C:\abc\
echo/
endlocal
pause
ここで使用されているすべての追加コードについては、Why is string comparison after prompting user for a string/option not working as expected?の回答をご覧ください。
使用されているコマンドとその動作方法を理解するには、コマンドプロンプトウィンドウを開き、次のコマンドを実行して、コマンドごとに表示されているすべてのヘルプページをすべてよく読んでください。
copy /?
echo /?
endlocal /?
goto /?
if /?
pause /?
rem /?
set /?
setlocal /?
1が2倍になるだけ3ファイルの種類があります。私はエラーが '%input% 'の代わりに'%data% 'を使うことに由来すると思います。varデータに以前に値が割り当てられていなければ、それは空です。 – LotPings
'@echo off'を' @echo ON'に変更して実行してください。リファレンスとしてhttp://ss64.com/nt/を適用してください。 '%data%'とは何かを不明確にし、変数 '%input%'を使用しないでください([mcve]を投稿してください)。 – JosefZ
'set /? | find/i "set/p" ' – Stephan