0

どうすれば分割できますか (バッチ スクリプトを使用)

[with slash]
a) http://www.someone.com/download/files/filename.exe
b) http://www.someone other.com/some files/filename 1.exe  (with spaces !)

[with backslash]
c) http:\\www.someone.com\download\files\filename.exe
d) http:\\www.someone other.com\some files\filename 1.exe  (with spaces !)

[mixed slash and backslash]
e) http:\\www.someone.com/download\files/filename.exe
f) http://www.someone other.com\some files/filename 1.exe  (with spaces !)

and all of the above when there is no HTTP part (starting with "www.")

(Base-)URL 部分とファイル名部分に分けます。

すべてのバリエーション (およびループ内の複数の変数) に対して 1 つのバッチ スクリプトを使用すると便利です :-)

何かのようなもの:

setlocal EnableDelayedExpansion
For %%G in (var1, var2, var3) do (
 set /A COUNT+=1

 ... routine to split "var1", "var2" and "var3" into temporary variables BASEURL and FILENAME

 set Folder!COUNT!=%BASEURL%
 set Name!COUNT!=%FILENAME%
)

Output:
For /L %%A in (1,1,3) do (
 echo URL: !Folder%%A! --- FIILENAME: !Name%%A!
)
4

4 に答える 4

1
@ECHO OFF
SETLOCAL
SET download=https://www.someone.com/download/files/filename.exe&CALL :splitme
SET download=https://www.someone other.com/some files/filename 1.exe&CALL :splitme
SET download=https:\\www.someone.com\download\files\filename.exe&CALL :splitme
SET download=https:\\www.someone other.com\some files\filename 1.exe&CALL :splitme
SET download=https:\\www.someone.com/download\files/filename.exe&CALL :splitme
SET download=https://www.someone other.com\some files/filename 1.exe&CALL :splitme
SET download=http://www.someone.com/download/files/filename.exe&CALL :splitme
SET download=http://www.someone other.com/some files/filename 1.exe&CALL :splitme
SET download=http:\\www.someone.com\download\files\filename.exe&CALL :splitme
SET download=http:\\www.someone other.com\some files\filename 1.exe&CALL :splitme
SET download=http:\\www.someone.com/download\files/filename.exe&CALL :splitme
SET download=http://www.someone other.com\some files/filename 1.exe&CALL :splitme
SET download=//www.someone.com/download/files/filename.exe&CALL :splitme
SET download=//www.someone other.com/some files/filename 1.exe&CALL :splitme
SET download=\\www.someone.com\download\files\filename.exe&CALL :splitme
SET download=\\www.someone other.com\some files\filename 1.exe&CALL :splitme
SET download=\\www.someone.com/download\files/filename.exe&CALL :splitme
SET download=//www.someone other.com\some files/filename 1.exe&CALL :splitme
GOTO :eof

:splitme
IF NOT "%download%"=="%download:*:=%" SET "download=%download:*:=%"
FOR /f "tokens=1*delims=\/" %%i IN ("%download%") DO (
SET domain=%%i&SET file=%%~nxj&SET lop=//%%i&SET "pol=%%~nxj"
)
:lop
SET download=%download:~1%&set lop=%lop:~0,-1%&IF DEFINED lop GOTO lop
:pol
SET download=%download:~0,-1%&set pol=%pol:~0,-1%&IF DEFINED pol GOTO pol
ECHO + "%domain%" + "%download%" + "%file%"
GOTO :eof

プロデュース:

  • "www.someone.com" + "/download/files/" + "filename.exe"
  • "www.someone other.com" + "/いくつかのファイル/" + "ファイル名 1.exe"
  • "www.someone.com" + "\download\files\" + "filename.exe"
  • "www.someone other.com" + "\いくつかのファイル\" + "ファイル名 1.exe"
  • "www.someone.com" + "/download\files/" + "filename.exe"
  • "www.someone other.com" + "\some files/" + "ファイル名 1.exe"
  • "www.someone.com" + "/download/files/" + "filename.exe"
  • "www.someone other.com" + "/いくつかのファイル/" + "ファイル名 1.exe"
  • "www.someone.com" + "\download\files\" + "filename.exe"
  • "www.someone other.com" + "\いくつかのファイル\" + "ファイル名 1.exe"
  • "www.someone.com" + "/download\files/" + "filename.exe"
  • "www.someone other.com" + "\some files/" + "ファイル名 1.exe"
  • "www.someone.com" + "/download/files/" + "filename.exe"
  • "www.someone other.com" + "/いくつかのファイル/" + "ファイル名 1.exe"
  • "www.someone.com" + "\download\files\" + "filename.exe"
  • "www.someone other.com" + "\いくつかのファイル\" + "ファイル名 1.exe"
  • "www.someone.com" + "/download\files/" + "filename.exe"
  • "www.someone other.com" + "\some files/" + "ファイル名 1.exe"

説明は簡単です。

于 2013-04-23T12:39:13.727 に答える
0

URLがFile.txtにある場合、これはここで機能します

@echo off
setlocal EnableDelayedExpansion
for /f "delims=" %%a in (file.txt) do (
set "var=%%~dpa"
set "var=!var:%cd%\=!"
set "var=!var:\=/!"
set "var=!var:/=/!"
echo "!var!" "%%~nxa"
)
pause



::file.txt
http://www.someone.com/download/files/filename1.exe
http://www.someone other.com/some files/filename 2.exe
http:\\www.someone.com\download\files\filename3.exe
http:\\www.someone other.com\some files\filename 4.exe
http:\\www.someone.com/download\files/filename5.exe
http://www.someone other.com\some files/filename 6.exe
www.someone.com/download/files/filename7.exe
www.someone other.com/some files/filename 8.exe
www.someone.com\download\files\filename9.exe
www.someone other.com\some files\filename A.exe
www.someone.com/download\files/filenameB.exe
www.someone other.com\some files/filename C.exe
于 2013-04-23T12:13:10.053 に答える
0

回答ありがとうございます。しかし、変数に保存されているDOWNLOAD-URLを分割したい。そして、FTP アドレスでもスクリプトを実行したいと言うのを忘れていました。しかし、あなたの答えとウェブでのさらなる研究の助けを借りて、私は自分の解決策を見つけました。

@echo off
setlocal EnableExtensions
setlocal EnableDelayedExpansion
mode con:cols=120 lines=32 && color 3E
title Example for splitting Download-URL into URL and Filename
cls

set _BASEURL=ftp://ftp.rarlab.com/rar/
set _WRx32=http://www.rarlab.com/rar/wrar v4.20.exe
set _WRx64=http:\/www.rarlab.com\rar files/winrar-x64-420.exe
set _WRLNG=rarlng.rar

:SPLIT
set COUNT=0
echo:_BASEURL = %_BASEURL%
echo:_WRx32   = %_WRx32%
echo:_WRx64   = %_WRx64%
echo:_WRLNG   = %_WRLNG%
echo:_____________________________________________________________________________

For %%A in ("%_BASEURL%", "%_WRx32%", "%_WRx64%", "%_WRLNG%") do (
 set Folder=
 set Name=
 set /A COUNT+=1
 if not %%~xA.==. (
  set "_vartmp=%%~A" ) else (
  set "_vartmp=%%~A\NO_FILE.EXT" )
 for %%B in ("Z:\!_vartmp!") do set "FILE!COUNT!=%%~nxB"
 for %%B in ("Z:\!_vartmp!") do set "_VAR=%%~dpB"
 set "_VAR=!_VAR:Z:\=!"
 if not $!_VAR!==$ (
  set "_VAR=!_VAR::\=:\\!"
  set "URL!COUNT!=!_VAR:~0,-1!" ) else (
  set "URL!COUNT!=NO_URL" )
)

set _BASEURL=%URL1%

set COUNT=0
:LOOPOUT
 set /A COUNT+=1
 if not defined URL%COUNT% exit /b 1
 if !URL%COUNT%!==NO_URL set "URL!COUNT!=%_BASEURL%"
 echo URL%COUNT%: !URL%COUNT%!\         --- FILE%COUNT%: !FILE%COUNT%!
goto LOOPOUT

SETLOCAL DisableDelayedExpansion
goto :EOF

最初にダウンロード URL を変数に保存してから、出力します。ここで、リンクを URL とファイル名に分割します。次に、URL とファイル名を動的変数に保存します (URL + 連続番号と FILE + 同じ連続番号)。ご覧のとおり、変数 "_WRLNG" の URL がないため、URL の代わりに文字列 "NO_URL" が保存されます。また、変数「_BASEURL」のリンクにはファイル名がないため、代わりに文字列「DUMMY.EXT」が保存されます。これは、URL+Nr/FILE+Nr 変数が空または欠落しないようにし、正しい 1:1 の相関関係を取得するために実行する必要があります。

分割は、最初に (仮想) ドライブ文字 (「Z:\」) を追加し、後でそれをダウンロード URL との間で削除することによって行われるため、「パラメータ拡張」を使用できます。"~dp" を使用すると、コマンド プロセッサはすべてのスラッシュをバックスラッシュに変更しますが、二重のスラッシュ/バックスラッシュも削除するため、"http:\" または "ftp:\" の後の 2 番目のバックスラッシュを再度追加する必要があります (":\" を":\"

URL1に保存された URL は、変数 "_BASEURL" に割り当てられます (他の URL を使用できます。INI ファイルから変数を読み取り、このスクリプトを使用して _BASEURL の表記を修正するため、これは単なる例です)。 、ユーザーがバックスラッシュの代わりにスラッシュを使用する場合。)変数「_BBASEURL」が使用されます(ここでは出力のみ)。ここでは、URL なしでファイル名だけが保存されます。

ラインで

echo URL%COUNT%: !URL%COUNT%!\ --- FILE%COUNT%: !FILE%COUNT%!

"..\" と "---..." の間には 1 つのスペースと 2 つのタビュレーターがあります。TAB を挿入するには、Windows のメモ帳で (テンキーで) ALT+009 を使用しました (保存する前の最後のステップ)。これを行うと、出力はタブ区切りのリストとして表示されます。

説明が半分理解できることを願っています。

于 2013-04-24T15:17:12.823 に答える
0
@Echo OFF

FOR /F "Usebackq Tokens=*" %%@ IN ("MyURLs.txt") DO (

    Call :CorrectURL  "%%@"
    Call :GetBase "%%URL%%"
    Call :GetFile "%%URL%%"
    Call Echo [+] Base: %%Base%%    File: %%File%%
)

Pause&Exit

:CorrectURL
(Set "URL=%~1" & Call Set "URL=%%URL:\=/%%" & Call Set "URL=%%URL:http://=%%") & (Goto:EOF)
:GetBase
(FOR /F "Tokens=1,* Delims=/" %%B IN ('Echo %~1') DO (Set "Base=%%B")) & (Goto:EOF)
:GetFile
(Set "File=%~nx1") & (Goto:EOF)

最初の sub : CorrectURLはスラッシュのバックスラッシュを置き換え、次に secureは URL から" http:// " 文字列を削除します。

2 番目のサブ : GetBaseは区切り記号としてスラッシュを使用して文字列を分割し、ベース URL である最初のトークンのみを取得します。

3 番目のサブ : GetFileは URL をパスとして扱うため、後で説明するように、特別な var 修飾子を使用してファイル名を簡単に取得できます。

出力:

[+] Base: www.someone.com       File: filename1.exe
[+] Base: www.someone other.com File: filename 2.exe
[+] Base: www.someone.com       File: filename3.exe
[+] Base: www.someone other.com File: filename 4.exe
[+] Base: www.someone.com       File: filename5.exe
[+] Base: www.someone other.com File: filename 6.exe

それがあなたが望む出力ではない場合は、コードを変更するように言ってください。

于 2013-04-23T11:08:25.913 に答える