2016-08-27 5 views
1

私はこの形式でパラメータとして、ユーザー名、パスワード、およびホストIPでバッチスクリプトを実行します:@で始まる@とホスト名を含むパスワードを区別する方法は?

ユーザ名:パスワード@の次のhostIP

しかし、私のパスワードが@記号が含まれています。それで、ホストが見つからないと出力します。例えば

batch.bat root:[email protected]@10.120.36.65 

どのように私はバッチスクリプトからこれをしますか?

+1

これは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

+1

このパラメータは 'batch.bat'によって解析されますか?その場合は、コードを表示する必要があります。それとも、編集されていないコマンドに単純にフィードされていますか?もしそうなら、あなたはそれがどんなコマンドであるか教えてください。そうでなければ、私たちはちょうど推測することができます... – aschipfl

+0

すべてのあなたの答えをありがとう。しかし、私の問題は、バッチファイルが内部的に1つ以上のルビーファイルを呼び出していて、それにマッチする正規表現がそこに書かれていたからです。私はルビーに変更を加えました。 – superuser33333

答えて

0
@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" 
0

ここに私のバッチコードは、ユーザー名、パスワード、およびホストのIPアドレスまたはホスト名までの文字列を分割することです1つ以上のアットマークを含むことができます。メールアドレスがパスワードとして使用されるため、ほとんどの場合、1つだけが@ですが、これはパスワードには適しません。

もちろん、ユーザー名、パスワード、ホストIPアドレスの3つの独立した引数を使用してバッチファイルを実行する必要がある方がずっと簡単です。単一の引数文字列を3つの別々の文字列に分割する必要はありません。

さらに、バッチファイル内から実行されるコンソールアプリケーションにはusername:[email protected]が必要です。このコンソールアプリケーションのほとんどは、この連結バリアントと比較して、少なくともパスワードのための分離された文字列でユーザー名、パスワード、およびホストIPアドレスを指定する別の変形もサポートしています。コンソールアプリケーションでサポートされている場合は、別々に指定された3つの文字列でコンソールアプリケーションを呼び出すことをお勧めします。

USERNAMENameUserを使用する理由である、このバッチファイルのために使用すべきではありません事前に定義された環境変数です。

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

  • call /? ...%~1(囲む二重引用符なしの最初の引数文字列)
  • echo /?
  • endlocal /?
  • for /?
  • goto /?
  • pause /?
  • rem /?
  • set /?
  • を説明します0
関連する問題