PowerShell ForEach循环异常:生成.hidden文件脚本无法正常运行
原脚本的问题分析
原脚本的核心问题是输出路径错误:
Out-File '.hidden'使用相对路径时,默认指向脚本运行的当前工作目录,而非正在遍历的子目录。- 每次循环都会覆盖顶层目录的.hidden文件,若最后遍历的目录无隐藏项,最终顶层的.hidden就会变成空文件,其他子目录根本不会生成自己的.hidden文件。
修正后的脚本
$targetRoot = $args[0] # 遍历所有子目录,生成对应目录的.hidden文件 Get-ChildItem -Path $targetRoot -Directory -Recurse -Force | ForEach-Object { # 拼接当前子目录下.hidden的完整路径 $hiddenFile = Join-Path -Path $_.FullName -ChildPath '.hidden' # 获取当前目录下的隐藏项(文件/文件夹),输出名称到.hidden,用UTF-8编码适配Linux Get-ChildItem -Path $_.FullName -Hidden -Force -Name | Out-File -Path $hiddenFile -Encoding utf8 } # 处理目标根目录本身(如果需要为顶层目录生成.hidden) $topHiddenFile = Join-Path -Path $targetRoot -ChildPath '.hidden' Get-ChildItem -Path $targetRoot -Hidden -Force -Name | Out-File -Path $topHiddenFile -Encoding utf8
关键修改点
- 用
Join-Path生成每个子目录下.hidden的完整路径,确保每个目录都生成自己的配置文件。 - 添加
-Encoding utf8参数,保证文件编码适配Linux环境,避免识别异常。 - 单独补充了目标根目录的处理逻辑(原脚本未覆盖顶层目录),可根据需求选择保留或删除。
使用说明
运行脚本时传入共享目录的路径即可,例如:
.\Generate-HiddenFiles.ps1 "D:\MySharedFolder"
内容的提问来源于stack exchange,提问作者paradroid
相关产品推荐
相关产品推荐

