2017-01-20 18 views
-2

でコピーします。バッチファイルは、私は、次のMS Windowsバッチファイルのコードを持っているユーザー入力

@echo off 
cd\ 
dir/s *.docx *.xlsx *.ppt *.docx 
SET /p input= %data% " 
copy "%data%" C:\abc\ 
pause 

このコマンドは、すべてのドライブを超える拡張子リストのすべての4種類を示しているが、私は、ユーザーからの入力をしたいと目的の場所にコピーします。

私には何が欠けていますか?

+0

1が2倍になるだけ3ファイルの種類があります。私はエラーが '%input% 'の代わりに'%data% 'を使うことに由来すると思います。varデータに以前に値が割り当てられていなければ、それは空です。 – LotPings

+2

'@echo off'を' @echo ON'に変更して実行してください。リファレンスとしてhttp://ss64.com/nt/を適用してください。 '%data%'とは何かを不明確にし、変数 '%input%'を使用しないでください([mcve]を投稿してください)。 – JosefZ

+0

'set /? | find/i "set/p" ' – Stephan

答えて

0

あなたの主な間違いは、環境変数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 /?
+0

Thanxはとても役に立ちます。あなたは天才です – Batcher

関連する問題