获取文件夹中所有文件夹、子文件夹和文件的相对路径
Get Relative paths of all the folders, sub-folders and files in a folder
我有一个名为 source 的文件夹。它的结构如下。
source\a.jpg
source\b.jpg
source\c.xml
source\d.ps1
source\subdir1\a.xml
source\subdir2\b.png
source\subdir3\subsubdir1\nothing.img
我想在文本文件中列出文件夹、子文件夹和文件的所有相对路径,比如 out.txt。对于上面的输出,我期望的是:
source\a.jpg
source\b.jpg
source\c.xml
source\d.ps1
source\subdir1\a.xml
source\subdir2\b.png
source\subdir3\subsubdir1\nothing.img
source\subdir1
source\subdir2
source\subdir3
source\subdir3\subsubdir1
您可以看到输出也包括单独的文件夹和子文件夹。
注意:我在源文件夹外的文件夹中。我的意思是,例如我在 fold 文件夹中,其中包含源文件夹 -> fold/source
但如果您的解决方案包括将脚本放入源文件夹中,那也很好。两种解决方案都很好。这可能很容易,但我不熟悉 powershell,但如果给定,至少可以 运行 从中获取脚本。
EDIT1: 好的,在 "duplicate question" 中答案是针对单个文件的相对路径。但我也想要文件夹和子文件夹。
EDIT2: 好的,我写了一个命令:
(gci -path source -recurse *.|Resolve-path -relative) -replace "","" | out-file -FilePath output.txt -Encoding ascii
现在,这个命令给我源内唯一子目录的相对名称(在我的实际源文件夹中具有不同的名称;源显然是一个虚拟名称!)。我应该在此代码中更改什么以获取源中子目录中文件的其他名称。
不是很干净,但这可能是一个选择。
(Get-ChildItem -Recurse -Path "C:\ABC\source\").FullName|ForEach{[Regex]::Replace($_,'^C:\ABC\','')}
这是干净的一行答案,我没有写循环,完美地完成了工作。有点侥幸"playing around"生产出来了
(gci -Path source -Recurse *.*|Resolve-Path -Relative) -replace "\.","" |
Out-File -FilePath output.txt -Encoding ascii
我可能会这样做:
$source = 'C:\path\to\source'
$parent = [IO.Path]::GetDirectoryName($source) -replace '\+$'
$pattern = '^' + [regex]::Escape($parent) + '\'
Get-ChildItem -Path $source -Recurse | % { $_.FullName -replace $pattern }
我有一个名为 source 的文件夹。它的结构如下。
source\a.jpg
source\b.jpg
source\c.xml
source\d.ps1
source\subdir1\a.xml
source\subdir2\b.png
source\subdir3\subsubdir1\nothing.img
我想在文本文件中列出文件夹、子文件夹和文件的所有相对路径,比如 out.txt。对于上面的输出,我期望的是:
source\a.jpg
source\b.jpg
source\c.xml
source\d.ps1
source\subdir1\a.xml
source\subdir2\b.png
source\subdir3\subsubdir1\nothing.img
source\subdir1
source\subdir2
source\subdir3
source\subdir3\subsubdir1
您可以看到输出也包括单独的文件夹和子文件夹。
注意:我在源文件夹外的文件夹中。我的意思是,例如我在 fold 文件夹中,其中包含源文件夹 -> fold/source
但如果您的解决方案包括将脚本放入源文件夹中,那也很好。两种解决方案都很好。这可能很容易,但我不熟悉 powershell,但如果给定,至少可以 运行 从中获取脚本。
EDIT1: 好的,在 "duplicate question" 中答案是针对单个文件的相对路径。但我也想要文件夹和子文件夹。
EDIT2: 好的,我写了一个命令:
(gci -path source -recurse *.|Resolve-path -relative) -replace "","" | out-file -FilePath output.txt -Encoding ascii
现在,这个命令给我源内唯一子目录的相对名称(在我的实际源文件夹中具有不同的名称;源显然是一个虚拟名称!)。我应该在此代码中更改什么以获取源中子目录中文件的其他名称。
不是很干净,但这可能是一个选择。
(Get-ChildItem -Recurse -Path "C:\ABC\source\").FullName|ForEach{[Regex]::Replace($_,'^C:\ABC\','')}
这是干净的一行答案,我没有写循环,完美地完成了工作。有点侥幸"playing around"生产出来了
(gci -Path source -Recurse *.*|Resolve-Path -Relative) -replace "\.","" |
Out-File -FilePath output.txt -Encoding ascii
我可能会这样做:
$source = 'C:\path\to\source'
$parent = [IO.Path]::GetDirectoryName($source) -replace '\+$'
$pattern = '^' + [regex]::Escape($parent) + '\'
Get-ChildItem -Path $source -Recurse | % { $_.FullName -replace $pattern }