如果替换是在变量中传递的,那么第一个和第二个替换是否相等?
#!/usr/bin/env perl6
use v6;
my $foo = 'switch';
my $t1 = my $t2 = my $t3 = my $t4 = 'this has a $foo in it';
my $replace = prompt( ':' ); # $0
$t1.=subst( / ( \$ \w+ ) /, $replace );
$t2.=subst( / ( \$ \w+ ) /, { $replace } );
$t3.=subst( / ( \$ \w+ ) /, { $replace.EVAL } );
$t4.=subst( / ( \$ \w+ ) /, { ( $replace.EVAL ).EVAL } );
say …Run Code Online (Sandbox Code Playgroud) 我在Windows上的开发环境包括子文件夹,即文件夹c:\ MyBuild可以被子文件替换为驱动器号,比如t:
在Ubuntu子系统终端中,我可以将文件夹绑定到mount,就像这样
sudo mount --bind /mnt/c/MyBuild /mnt/t
Run Code Online (Sandbox Code Playgroud)
这在当前shell中工作正常,但它不是持久的,如果从外部调用bash脚本,则此挂载不存在,因此脚本可能会失败,文件夹/ mnt/t/someFolder不存在.
我确实将以下内容添加到/ etc/fstab中,但它没有按预期工作
/mnt/t /mnt/c/MyBuild none defaults,bind 0 0
Run Code Online (Sandbox Code Playgroud)
如何在Windows Ubuntu子系统中使此挂载持久化?
为了使它正常工作,我必须更改什么?
my $str = "start middle end";
my $regex = / start ( .+ ) end /;
$str.=subst( / <$regex> /, { $0 } ); # dies: Use of Nil in string context
say "[$str]";
Run Code Online (Sandbox Code Playgroud) 我想知道是否存在一种使用驱动器号(例如X:\foo\bar.txt)将路径解析为等效UNC路径的通用方法,该路径可能是以下之一:
X:\foo\bar.txt如果X:是真正的驱动器(即硬盘,USB棒等)\\server\share\foo\bar.txt如果X:安装了网络驱动器\\server\shareC:\xyz\foo\bar.txt如果X:是的结果SUBST命令映射X:到C:\xyz我知道有部分解决方案可以:
解决网络驱动器(例如见问题556649依赖于WNetGetUniversalName)
解决SUBST驱动器号(请参阅QueryDosDevice哪些驱动器号按预期工作,但不返回本地驱动器或网络驱动器等UNC路径).
我错过了在Win32中实现此驱动器号解析的一些简单方法吗?或者我是否真的不得不兼顾两者WNetGetUniversalName并QueryDosDevice得到我需要的东西?
我正在使用VBScript,我的目标是能够用驱动器号代替我选择的路径.我需要D驱动器,如果它不可用,我需要检查它是否已经映射到正确的位置; 然后通知用户是否不是.我发现了这个:http://technet.microsoft.com/en-us/library/ee156605.aspx,我正在尝试调整他们的第二个例子:
Set objShell = WScript.CreateObject("WScript.Shell")
Set objExecObject = objShell.Exec("cmd /c ping -n 3 -w 1000 157.59.0.1")
Do While Not objExecObject.StdOut.AtEndOfStream
strText = objExecObject.StdOut.ReadLine()
If Instr(strText, "Reply") > 0 Then
Wscript.Echo "Reply received."
Exit Do
End If
Loop
Run Code Online (Sandbox Code Playgroud)
(我的改编):
Set objShell = WScript.CreateObject("WScript.Shell")
Set objExecObject = objShell.Exec("cmd /c substr")
strText = ""
Do While Not objExecObject.StdOut.AtEndOfStream
strText = strText & objExecObject.StdOut.ReadLine()
Loop
Wscript.Echo strText
Run Code Online (Sandbox Code Playgroud)
然后我可能会搜索告诉D驱动器映射位置的字符串.我也试过objShell.Exec("subst"),但我仍然没有得到任何输出.有没有人对我可能做错了什么有任何想法?或者有更好的方法来说明驱动器映射吗?谢谢,
213897
在Windows上使用cmd,使用pushd很容易为UNC路径分配驱动器号:
C:\Windows\> pushd \\server\share\path
Y:\> popd
C:\Windows\>
Run Code Online (Sandbox Code Playgroud)
但是我希望能够对本地路径执行相同操作,因为它会缩短文件路径,并且我必须使用不支持具有很长路径的文件的命令.
这个想法是G:在脚本中没有硬编码的情况,因为它可以在另一台机器上使用.
subst G: .
pushd G:\
(other commands)
popd
subst G: /d
Run Code Online (Sandbox Code Playgroud)
我试过pushd \\?\%CD%但不幸的是它不起作用......
有没有人有魔术呢?
谢谢