c# - 如何组合 Windows 路径和通配符?
问题描述
我的剪贴板中经常有一个 Windows 绝对路径(例如C:\test
),我想将它粘贴到git-bash
. 如果我将路径放在单引号中,这通常有效:
$ ls 'C:\test'
bar.txt foo.txt baz.exe dat.exe
我的问题是当我尝试向路径添加通配符时:
$ ls 'C:\test\*.txt'
ls: cannot access 'C:\test\*.txt': No such file or directory
$ ls 'C:\test\'*.txt
ls: cannot access 'C:\test\*.txt': No such file or directory
我知道如果我将路径转换为 Unix 风格的 ie /c/test/*.txt
,它会起作用,但这不是很方便,因为我已经在剪贴板中有 Windows 路径。
有任何想法吗?
解决方案
我最终用 C# 编写了一个控制台应用程序,可以在 Windows 和git-bash
. 我只是在剪贴板中找到一个路径,运行这个应用程序,它会更新剪贴板以具有相反的样式路径。然后我只是粘贴。
using System;
using System.Text.RegularExpressions;
using System.Windows.Forms;
namespace SwitchPath
{
internal static class Program
{
private const RegexOptions Options =
RegexOptions.IgnoreCase | RegexOptions.CultureInvariant |
RegexOptions.Multiline;
private static readonly Regex WinPath = new Regex(
@"^([a-z]):\\(.+)$", Options);
private static readonly Regex UnixPath = new Regex(
@"^/([a-z])/(.+)$", Options);
[STAThread]
private static void Main()
{
var path = Clipboard.GetText().Trim();
string drive, rest;
var m = WinPath.Match(path);
if (m.Success)
{
drive = m.Groups[1].Value.ToLowerInvariant();
rest = m.Groups[2].Value.Trim().Replace(@"\", "/");
path = $"/{drive}/{rest}";
Clipboard.SetText(path);
return;
}
m = UnixPath.Match(path);
if (m.Success)
{
drive = m.Groups[1].Value.ToUpperInvariant();
rest = m.Groups[2].Value.Trim().Replace("/", @"\");
path = $@"{drive}:\{rest}";
Clipboard.SetText(path);
}
}
}
}
推荐阅读
- java - Quarkus 项目未构建
- python - 熊猫数据框比较
- javascript - 获取 json 对象中最长的数组
- dataframe - Understanding the behavior of the colon in julia DataFrames.select()
- c# - 获取自定义控件的值
- c# - Xamarin.Forms 图像未从源显示
- google-sheets - Google 表格 SUMPRODUCT/COUNTIF 公式问题
- react-native - PayPal REST API 获取 react-native 中的 access_token,“AUTHENTICATION_FAILURE”
- php - PHP变量不打印任何值
- kubernetes - Kubernetes - Consul - Envoy - 如何设置负载均衡算法?