如何在批处理中将URL拆分为其组成部分?

时间:2015-10-15 16:29:09

标签: batch-file

我在我的批处理脚本中输入了未知长度文件的URL。

http://Repository.com/Stuff/Things/Repo/file1.csv

http://www.place.com/Folder/file2.xml

与它们几乎没有任何一致性。我需要一种只使用批处理的方法(尽管从批处理中调用powershell是一个选项)将这些方法分解为完整路径和文件名。

http://Repository.com/Stuff/Things/Repo/

http://www.place.com/Folder/

file1.csv

file2.xml

我已经看过用其他语言做的方法,但我只限于批量,而且它不是我强大的语言之一。我尝试使用带有“delims = /”的far / f循环,但是当它到达//时它会退出。

4 个答案:

答案 0 :(得分:3)

在PowerShell中,您可以将URL字符串转换为System.Uri类,该类提供有关URL及其结构的详细信息。您可能需要使用serialization format属性进行操作,如下所示:

PS C:\> # get System.Uri object:
PS C:\> $uri = [uri]"http://Repository.com/Stuff/Things/Repo/file1.csv"
PS C:\> $uri


AbsolutePath   : /Stuff/Things/Repo/file1.csv
AbsoluteUri    : http://repository.com/Stuff/Things/Repo/file1.csv
LocalPath      : /Stuff/Things/Repo/file1.csv
Authority      : repository.com
HostNameType   : Dns
IsDefaultPort  : True
IsFile         : False
IsLoopback     : False
PathAndQuery   : /Stuff/Things/Repo/file1.csv
Segments       : {/, Stuff/, Things/, Repo/...}
IsUnc          : False
Host           : repository.com
Port           : 80
Query          :
Fragment       :
Scheme         : http
OriginalString : http://Repository.com/Stuff/Things/Repo/file1.csv
DnsSafeHost    : repository.com
IsAbsoluteUri  : True
UserEscaped    : False
UserInfo       :



PS C:\> # get base URL without page name and query parameters:
PS C:\> $uri.Scheme + ":/" + $uri.Authority + (-join $uri.Segments[0..($uri.Segments.Length - 2)])
http:/repository.com/Stuff/Things/Repo/
PS C:\> # get page/file name:
PS C:\> $uri.Segments[-1]
file1.csv

答案 1 :(得分:3)

@echo off
setlocal EnableDelayedExpansion

set "url=http://Repository.com/Stuff/Things/Repo/file1.csv"

for %%a in ("%url%") do (
   set "urlPath=!url:%%~NXa=!"
   set "urlName=%%~NXa"
)
echo URL path: "%urlPath%"
echo URL name: "%urlName%"

输出:

URL path: "http://Repository.com/Stuff/Things/Repo/"
URL name: "file1.csv"

答案 2 :(得分:0)

使用字符串类的splitSubString方法。

e.g。

$filename = $url.split('/')[-1]
# $url.split('/') splits the url on the '/' character. [-1] takes the last part
$rest = $url.SubString(0, $url.Length - $filename.Length)
# The first parameter is the starting index of the substring, the second is the length.

答案 3 :(得分:0)

IHttpHandler


输出

enter image description here