まず、このトピックを見ましたが、理解できませんでした。
質問 :
D:\path\to\file.bat
次の内容のバッチファイルがあります。
echo %cd%
pause
出力は:
C:\
それは違いない D:\path\to
何が悪いのですか?
まず、このトピックを見ましたが、理解できませんでした。
質問 :
D:\path\to\file.bat
次の内容のバッチファイルがあります。
echo %cd%
pause
出力は:
C:\
それは違いない D:\path\to
何が悪いのですか?
回答:
システムの読み取り専用変数%CD%
は、バッチファイルの場所ではなく、バッチの呼び出し元のパスを保持します。
ユーザーが%0
(などscripts\mybatch.bat
)を使用して入力したバッチスクリプト自体の名前を取得できます。パラメータの拡張機能は、このように適用することができ%~dp0
、バッチスクリプト(例えばにドライブとパスを返しますW:\scripts\
)および%~f0
フルパス名(例を返しますW:\scripts\mybatch.cmd
)。
次の構文を使用すると、バッチスクリプトと同じフォルダー内の他のファイルを参照できます。
CALL %0\..\SecondBatch.cmd
これは、サブルーチンで使用することもできEcho %0
、呼び出しラベルecho "%~nx0"
を提供しますが、バッチスクリプトのファイル名を提供します。
ときに%0
変数が展開され、その結果が引用符で囲まれています。
stm.sql
でD:\Dir1\Dir2\stm.sql
。mysql.exe -u root -p mysql < %cd%\stm.sql
そのstm.sqlコマンドを実行する必要があり ます。
*.bat
またはのようなバッチファイルではありませんか*.sh
?
D:\Dir1\Dir2\batchfile.bat
およびには2つのファイルがありD:\Dir1\Dir2\stm.sql
ます。batchfile.batの内容は:でmysql.exe -u root -p mysql < D:\Dir1\Dir2\stm.sql
あり、stm.sqlの内容はいくつかのMySQLコマンドです。
echo %~dp0
バッチの場所へのパスを返します。echo %~f0
ファイル名を持つバッチへのパスを返します。
非常にシンプル:
setlocal
cd /d %~dp0
File.exe
cd /d %~dp0
はバッチファイルの最初の行として使用し、作業をしました
.batファイル内:
set mypath=%cd%
これで、変数%mypath%
を使用してファイルへのファイルパスを参照.bat
できます。パスが正しいことを確認するには:
@echo %mypath%
たとえばDIR.bat
、次の内容で呼び出されたファイル
set mypath=%cd%
@echo %mypath%
Pause
ディレクトリから実行するg:\test\bat
と、DOSコマンドウィンドウにそのパスがエコーされます。
これは、すべてのバッチファイルの先頭で使用するものです。テンプレートフォルダーからコピー/貼り付けするだけです。
@echo off
:: --HAS ENDING BACKSLASH
set batdir=%~dp0
:: --MISSING ENDING BACKSLASH
:: set batdir=%CD%
pushd "%batdir%"
現在のバッチファイルのパスを%batdir%に設定すると、このバッチファイルの変更先に関係なく、現在のバッチファイルの後続のstmtでそれを呼び出すことができます。PUSHDを使用すると、POPDを使用して、このバッチファイルのパスを元の%batdir%にすばやく設定できます。%batdir%ExtraDirまたは%batdir%\ ExtraDir(上記で使用したバージョンに応じて、バックスラッシュで終了するかどうか)を使用する場合、パスにスペースがある場合(たとえば、「%batdir%ExtraDir」)、文字列全体を二重引用符で囲む必要があります。 )。常にPUSHD%〜dp0を使用できます。[https:// ss64.com/ nt / syntax-args .html]には(%〜)パラメータの詳細があります。
行の先頭に(::)を使用すると、コメント行になります。さらに重要なことに、::を使用すると、リダイレクタ、パイプ、特殊文字(<> |など)をコメントに含めることができます。
:: ORIG STMT WAS: dir *.* | find /v "1917" > outfile.txt
もちろん、Powershellはこれだけでなく、他にも多くのことを行います。
set batdir=%CD%
)に注意してください。これは発信者へのパスであり、batファイル自体ではないため、問題です。実行中のbatファイルへのパスを取得する唯一の有効な方法は、%~dp0
です。