我在处理不同位置的相同文件时,需要把文件转为相对路径,使用 Resolve-Path cmdlet。
但我发现 Resolve-Path -Relative 处理后,部分文件无法被找到。
仔细研究后,发现这些未找到的文件,文件名都含有特殊字符(比如“[”)。用 Tab 键自动填充时,会在这些特殊字符前自动加“`”符号。所以是 Resolve-Path 输出的相对路径的字符串没有转义字符导致无法正确找到这些文件。
假设有这些文件:- C:\Test\1.txt
- C:\Test\2.txt
- C:\Test\1[2].txt
- C:\Test\backup\1.txt
复制代码
- D:\Test\1.txt
- D:\Test\2.txt
- D:\Test\1[2].txt
- D:\Test\backup\1.txt
复制代码 当前目录在 C:\Test,我要根据 C:\Test 下拥有的文件来列出 D:\Test 中存在的相同文件(包括无限层级的子文件夹)。
首先我先将文件的相对路径保存到 $temp 变量。- $temp=((Get-ChildItem -Recurse -Force "C:\Test" ).FullName |Resolve-Path -Relative)
复制代码 然后切换当前目录到 D:\Test。(内容基本相同。)复制代码 然后通过管道来列出之前保存在 $temp 相对路径对应的文件。复制代码 这时发现少输出少了一行,D:\Test\backup\1[2].txt 没能列出。很可能是因为转义字符导致的问题。但也没有报错。
更简单的例子:
假设有两个文件:- C:\Test2\1.txt
- C:\Test2\1[2].txt
复制代码 然后执行以下两条命令(不需要指定当前目录):- (Get-Item "C:\Test2\1.txt").FullName|Get-Item -Force
- (Get-Item "C:\Test2\1[2].txt").FullName|Get-Item -Force
复制代码 前者可以输出文件信息,但是后者则是没有输出。
因此我想了解是否有函数能对字符串或路径添加转义字符,或者是有没有办法能让 Resolve-Path 以文本外的其它类型输出内容等的方式来解决问题。还是说只能手动写程序来查找这些需要转义的字符并为这些字符添加转义字符。 |