私はこの形式でパラメータとして、ユーザー名、パスワード、およびホストIPでバッチスクリプトを実行します:@で始まる@とホスト名を含むパスワードを区別する方法は?
ユーザ名:パスワード@の次のhostIP
しかし、私のパスワードが@
記号が含まれています。それで、ホストが見つからないと出力します。例えば
:
batch.bat root:[email protected]@10.120.36.65
どのように私はバッチスクリプトからこれをしますか?
私はこの形式でパラメータとして、ユーザー名、パスワード、およびホストIPでバッチスクリプトを実行します:@で始まる@とホスト名を含むパスワードを区別する方法は?
ユーザ名:パスワード@の次のhostIP
しかし、私のパスワードが@
記号が含まれています。それで、ホストが見つからないと出力します。例えば
:
batch.bat root:[email protected]@10.120.36.65
どのように私はバッチスクリプトからこれをしますか?
@echo off
setlocal
for /F "tokens=1,2* delims=:@" %%a in ("%1") do (
set "user=%%a"
set "pass=%%b"
set "host=%%c"
)
for /F "tokens=1* [email protected]" %%a in ("%host%") do (
if "%%b" neq "" (
set "pass=%pass%@%%a"
set "host=%%b"
)
)
echo Username: "%user%"
echo Password: "%pass%"
echo HostIP: "%host%"
出力例:
@echo off
setlocal EnableDelayedExpansion
if "%~1" == "" goto OutputError
set "NameUser="
set "Password="
set "HostNameIP="
for /F "tokens=1,2 delims=:" %%I in ("%~1") do (
set "NameUser=%%I"
set "Password=%%J"
set "HostNameIP=%%J"
)
rem Is there a colon at all in string and something after the colon?
if "%Password%" == "" goto OutputError
rem Is there at least one At sign in argument string after first colon?
if "%Password:@=%" == "%HostNameIP%" goto OutputError
rem Get host name/IP which is the string after last At sign.
rem The argument string should not end with an At sign.
:GetHostNameIP
set "HostNameIP=%HostNameIP:*@=%"
if "%HostNameIP%" == "" goto OutputError
if not "%HostNameIP:@=%" == "%HostNameIP%" goto GetHostNameIP
rem Get password which is the string between first colon and last
rem At sign which is here the password string with all (hopefully
rem only one) @HostNameIP removed from password string.
set "Password=!Password:@%HostNameIP%=!"
rem Is there a password in argument string?
if "%Password%" == "" goto OutputError
echo The user name is: %NameUser%
echo The password is: %Password%
echo Host name/IP is: %HostNameIP%
goto EndBatch
:OutputError
echo.
echo ERROR: username:[email protected] not specified correct.
:EndBatch
echo.
endlocal
pause
パスワード文字列を:
C:\> batch.bat username:[email protected]
Username: "username"
Password: "password"
HostIP: "hostip"
C:\> batch.bat root:[email protected]@10.120.36.65
Username: "root"
Password: "[email protected]"
HostIP: "10.120.36.65"
ここに私のバッチコードは、ユーザー名、パスワード、およびホストのIPアドレスまたはホスト名までの文字列を分割することです1つ以上のアットマークを含むことができます。メールアドレスがパスワードとして使用されるため、ほとんどの場合、1つだけが@
ですが、これはパスワードには適しません。
もちろん、ユーザー名、パスワード、ホストIPアドレスの3つの独立した引数を使用してバッチファイルを実行する必要がある方がずっと簡単です。単一の引数文字列を3つの別々の文字列に分割する必要はありません。
さらに、バッチファイル内から実行されるコンソールアプリケーションにはusername:[email protected]
が必要です。このコンソールアプリケーションのほとんどは、この連結バリアントと比較して、少なくともパスワードのための分離された文字列でユーザー名、パスワード、およびホストIPアドレスを指定する別の変形もサポートしています。コンソールアプリケーションでサポートされている場合は、別々に指定された3つの文字列でコンソールアプリケーションを呼び出すことをお勧めします。
注:USERNAME
NameUser
を使用する理由である、このバッチファイルのために使用すべきではありません事前に定義された環境変数です。
使用されているコマンドとその動作方法を理解するには、コマンドプロンプトウィンドウを開き、次のコマンドを実行して、コマンドごとに表示されているすべてのヘルプページをすべてよく読んでください。
call /?
...%~1
(囲む二重引用符なしの最初の引数文字列)echo /?
endlocal /?
for /?
goto /?
pause /?
rem /?
set /?
これはFTPで使用されますか?または別のもの?これはFTPの場合==>これを見て==> [VBScript経由でWindowsでFTPフォルダを開く方法](http://stackoverflow.com/questions/34994285/how-to-open-an-ftp -folder-in-windows-via-vbscript?answertab = active#tab-top) – Hackoo
このパラメータは 'batch.bat'によって解析されますか?その場合は、コードを表示する必要があります。それとも、編集されていないコマンドに単純にフィードされていますか?もしそうなら、あなたはそれがどんなコマンドであるか教えてください。そうでなければ、私たちはちょうど推測することができます... – aschipfl
すべてのあなたの答えをありがとう。しかし、私の問題は、バッチファイルが内部的に1つ以上のルビーファイルを呼び出していて、それにマッチする正規表現がそこに書かれていたからです。私はルビーに変更を加えました。 – superuser33333