2017-01-14 7 views
0

このバッチファイルを作成して、特定のファイルをあるフォルダから別のフォルダに移動することができました。しかし、私は別のフォルダにもそれを使用できるようにしたい。たとえばここではファイルを移動するのはUTS16です。私は次のように他のフォルダに対しても、このバッチファイルを使用したいUTS15UTS14UTS13UTS12などバッチファイルのユーザーにフォルダ名/パスを尋ねる方法は?

私はどのフォルダ上で実行するバッチユーザーに依頼するコードに変更する必要がありますか?私は何が欠けていますか?

@echo off 
SET /P letter=Please give your drive letter and press ENTER: 
ECHO %letter% 
PAUSE 

SET Datefolder="%date:~10,4%_%date:~4,2%_%date:~7,2%_%time:~0,2%%time:~3,2%" 

MD "%Datefolder%" 

mkdir %letter%:\UTS16\Database\"RTBackup%Datefolder%" 

move /-y "%letter%:\UTS16\Database\*.dbf" "%letter%:\UTS16\Database\RTBackup%Datefolder%" 
move /-y "%letter%:\UTS16\Database\*.cdx" "%letter%:\UTS16\Database\RTBackup%Datefolder%" 
move /-y "%letter%:\UTS16\Database\*.~cd" "%letter%:\UTS16\Database\RTBackup%Datefolder%" 
move /-y "%letter%:\UTS16\Database\*.~db" "%letter%:\UTS16\Database\RTBackup%Datefolder%" 
move /-y "%letter%:\UTS16\Database\*.fpt" "%letter%:\UTS16\Database\RTBackup%Datefolder%" 
move /-y "%letter%:\UTS16\Database\RTBackup%Datefolder%\zipdata.dbf" "%letter%:\UTS16\Database\" 
pause 

start "" %letter%:\UTS16/dbrepair.exe 
+2

ドライブレターで使用したのと同じコードです。 – Squashman

+0

これで、ドライブレターのコードと同じコードを使用して、フォルダの年を決定することができました。そのチップをありがとう。申し訳ありませんが、私はこれで本当に新しいですし、私はそれを即座に把握しようとしています。今は "%Datefolder%"を取得して、作成するRTBackupフォルダの最後に日付と時刻を表示することはできません。私はそれが作成された日時を表示したいだけです。 –

+0

このコマンドラインは主にバッチファイルから選択します: 'echo%date:〜10,4%_%date:〜4,2%_%date:〜7,2%_%time:〜0.2 %% time:〜3,2% 'とし、Ctrl + Cでクリップボードにコピーします。コマンドプロンプトウィンドウを開き、コンソールウィンドウを右クリックしてコピーした行を貼り付け、コンテキストメニューで__Paste__を左クリックし、ENTERキーまたはRETURNキーを押してこのコマンドを実行します。あなたが期待する出力ではなく、 'echo%DATE %% TIME%'コマンドを実行し、出力日時を調べます。 – Mofi

答えて

0

私はコメントバッチファイル、次のタスクのためのお勧め:set variable="value"set "variable=value"との違いを説明するWhy is no string output with 'echo %var%' after using 'set var = text' on command line?上の最初の答えをお読みください

@echo off 
setlocal EnableExtensions EnableDelayedExpansion 
goto UserPrompt 

rem Define environment variable BaseFolder with a double quote character as 
rem value in case of the user enters nothing on prompt in which case the 
rem variable BaseFolder is still defined with the double quote as value. 

rem Then let the user enter the folder path or drag and drop 
rem the folder over the console window to enter the path. 

rem Next remove all double quotes from folder path and test 
rem if the variable BaseFolder still exists with a value. 

rem Last replace forward slashes by backslashes in case of user entered 
rem the path with forward slashes, make sure the folder path does not 
rem end with a backslash and test if the folder really exists in case of 
rem user has made a typing mistake on entering manually the folder path. 

rem Run the backup and repair operation if entered folder exists as expected. 

:UserPrompt 
cls 
echo/ 
echo Please type the database base folder path and press ENTER. 
echo/ 
echo Or alternatively drag ^& drop the folder from Windows 
echo Explorer on this console window and press ENTER. 
echo/ 

set "BaseFolder="" 
set /P "BaseFolder=Path: " 
set "BaseFolder=!BaseFolder:"=!" 
if "!BaseFolder!" == "" goto UserPrompt 
set "BaseFolder=!BaseFolder:/=\!" 
if "!BaseFolder:~-1!" == "\" set "BaseFolder=!BaseFolder:~0,-1!" 
if "!BaseFolder!" == "" goto UserPrompt 
echo/ 

if not exist "!BaseFolder!\Database\*" (
    echo There is no folder "!BaseFolder!\Database". 
    echo/ 
    choice "Do you want to enter the path once again " 
    if errorlevel 2 goto ExitBatch 
    goto UserPrompt 
) 

set "BackupFolder=%BaseFolder%\Database\RTBackup%DATE:~10,4%_%DATE:~4,2%_%DATE:~7,2%_%TIME:~0,2%%TIME:~3,2%" 

rem For German date/time format which is for DATE TIME: dd.mm.yyy hh:mm:ss,xx 
rem set "BackupFolder=%BaseFolder%\Database\RTBackup%DATE:~-4%_%DATE:~-7,2%_%DATE:~-10,2%_%TIME:~0,2%%TIME:~3,2%" 

if exist "%BackupFolder%\*" goto MakeBackup 

md "%BackupFolder%" 
if errorlevel 1 (
    echo/ 
    echo Error: Failed to create backup folder !BackupFolder! 
    echo/ 
    choice "Repair without making a backup " 
    if errorlevel 2 goto ExitBatch 
    goto RunRepair 
) 

:MakeBackup 
echo Making a backup to folder !BackupFolder! ... 
move /-y "%BaseFolder%\Database\*.dbf" "%BackupFolder%" 2>nul 
move /-y "%BaseFolder%\Database\*.cdx" "%BackupFolder%" 2>nul 
move /-y "%BaseFolder%\Database\*.~cd" "%BackupFolder%" 2>nul 
move /-y "%BaseFolder%\Database\*.~db" "%BackupFolder%" 2>nul 
move /-y "%BaseFolder%\Database\*.fpt" "%BackupFolder%" 2>nul 
move /-y "%BackupFolder%\zipdata.dbf" "%BaseFolder%\Database\" 2>nul 

:RunRepair 
echo/ 
echo Running database repair ... 
"%BaseFolder%\dbrepair.exe" 

:ExitBatch 
endlocal 

環境変数Datefolderが二重引用符で、問題のバッチファイルで作成されたが、もちろん良くない

"C:\UTS16\Database\RTBackup"2017_01_13_1250"" 

に例えば

"%letter%:\UTS16\Database\RTBackup%Datefolder%" 

の拡大をもたらし、環境変数の値に含まれています。二重引用符で囲まれた文字列の中の二重引用符は、一般に正しくありません。

とコマンドライン

mkdir %letter%:\UTS16\Database\"RTBackup%Datefolder%" 

は、Windowsのエラー訂正は、フォルダパスを修正するために残業をしなければならない

mkdir C:\UTS16\Database\"RTBackup"2017_01_13_1250"" 
に例えば拡大しました。

環境変数DATEおよびTIMEの日付/時刻形式は、現在のユーザーのWindows地域および言語設定によって異なります。ドイツのWindowsマシンの名前に日付と時刻のバックアップフォルダを定義するために別の行が必要でした。たとえば、How to get current datetime on Windows command line, in a suitable format for using in a filename?に掲載されている地域に依存しないソリューションがあります。ただし、環境変数DATETIMEを使用するより高速のコマンドラインが、このバッチファイルが使用されているコンピュータで動作する場合、そのラインを地域に依存しないソリューションに置き換える必要はありません。

この回答のバッチファイルは、誤って構文ミスで遅延拡張を使用しないパス文字列を入力した場合のバッチ処理の終了を防ぐため、環境変数の遅延拡張を主に使用します。

ユーザーは&をドラッグして、たとえばWindowsエクスプローラからコンソールウィンドウにドロップして、プロンプトでフォルダパスを入力することもできます。 DosTipsフォーラムのトピックによって説明されるように

echo/はアンパサンド&は引用符で囲まずに1つのコマンドラインで複数のコマンドを実行するためのオペレータとしてWindowsコマンドインタープリタによって解釈さECHO. FAILS to give text or blank line - Instead use ECHO/

出力にecho.よりも優れている空白行を使用されています文字列。そのため、この文字をキャレット文字^でエスケープして、コンソールウィンドウにエコーするリテラル文字として解釈する必要があります。コマンドラインに引用符で囲まれていない文字列で^でエスケープされていない、&,&&およびの意味の詳細については、Single line with multiple commands using Windows batch fileを参照してください。

コマンドchoiceは、ユーザーがエラーを続行するか、バッチファイルを終了するかを尋ねるときに使用されます。このコマンドを入力すると、はいまたはいいえ、Windowsの場合は[Y,N]?、ドイツ語の場合は[J,N]?のようにクエスチョンマークが付加されます。 choiceは、終了する前に他のキーを許可しません。 errorlevelに割り当てられた終了コードは2であり、1ありです。

は、以前のコマンドまたはアプリケーションの終了コードでテストするためのif errorlevelの使用方法について説明しています。この場合、ユーザがNoを選択した場合のエラーに対してバッチ処理を終了するには、errorlevelが2以上であることをテストすれば十分です。

"%BaseFolder%\dbrepair.exe"が実際に存在するかどうかは、このアプリケーションの実行を試みる前にチェックされません。バックアップフォルダを作成する前に、ユーザーに適切なエラーメッセージが表示されている追加のチェックが追加されているとよいでしょう。

使用されているコマンドとその動作方法を理解するには、コマンドプロンプトウィンドウを開き、次のコマンドを実行して、コマンドごとに表示されているすべてのヘルプページをすべてよく読んでください。

  • choice /?
  • cls /?
  • echo /?
  • endlocal /?
  • goto /?
  • if /?
  • md /?
  • move /?
  • set /?
  • setlocal /?

2>nulの説明については、Microsoft TechNetの記事Using command redirection operatorsをお読みください。

関連する問題