使用powershell循环浏览一个文件夹中的文件,并使用这些名称创建txt文件
我正在寻找一个脚本,为文件夹中的每个文件创建一个文本文件。.txt文件应使用该文件夹中每个文件的文件名,但扩展名应为.txt,而不是原始扩展名 我只需要在几个文件夹中执行此操作,因此我希望在该文件夹中打开PowerShell窗口,并在其中创建文本文件,而不必指定路径 我发现这一点很接近,但它将文件夹名称和扩展名添加到生成的.txt文件中使用powershell循环浏览一个文件夹中的文件,并使用这些名称创建txt文件,powershell,loops,Powershell,Loops,我正在寻找一个脚本,为文件夹中的每个文件创建一个文本文件。.txt文件应使用该文件夹中每个文件的文件名,但扩展名应为.txt,而不是原始扩展名 我只需要在几个文件夹中执行此操作,因此我希望在该文件夹中打开PowerShell窗口,并在其中创建文本文件,而不必指定路径 我发现这一点很接近,但它将文件夹名称和扩展名添加到生成的.txt文件中 Get-ChildItem -Path "C:\Temp" -Recurse | ForEach { [System.IO.File]::WriteAl
Get-ChildItem -Path "C:\Temp" -Recurse | ForEach {
[System.IO.File]::WriteAllText("C:\Temp" + $_.Name + ".txt", $_.FullName)
}
您需要筛选出目录和*.txt文件:
我还将$\u0.Name更改为$\u0.BaseName,以获取不带扩展名的文件名,如果您只想处理当前文件夹 删除-Recurse 使用-Path.\*' 请记住,该命令将覆盖任何先前存在的.txt文件 以及其他具有相同BaseName的文件中的.txt文件。 要克服这一问题,可以使用相同的BaseName对对象文件进行分组。 我会将其作为函数存储在配置文件中,这样您就可以随时访问它
## Q:\Test\2019\03\03\SO_54968726.ps1
Function New-TextRef {
Get-ChildItem -Path '.\*' -File |
Where-Object Extension -Notin '.txt','.mkv','.avi','.mp4','.jpg','.png','.wav'|
Group-Object BaseName | ForEach-Object{
[System.IO.File]::WriteAllText(("{0}\{1}.txt" -f (Pwd).Path,$_.Name),($_.Group -join "`n"))
}
}
无论您如何命名.ps1脚本文件,也可以将其加载到当前会话中
激活后,您只需在当前文件夹中运行名为New TextRef的函数,并创建.txt文件
样本输出:
> Get-ChildItem
Directory: Q:\Test\2019\03\03
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2019-03-03 22:30 377 netsh_wlan_show_profiles
-a---- 2019-03-04 00:31 343 SO_54968726.ps1
-a---- 2019-03-03 23:02 328 SO_54972848.ps1
-a---- 2019-03-03 22:32 216 SU_1410873.cmd
-a---- 2019-03-03 22:47 216 test.xml
-a---- 2019-03-03 23:02 194 testNew.xml
> . .\SO_54968726.ps1
> New-TextRef
> Get-ChildItem
Directory: Q:\Test\2019\03\03
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2019-03-03 22:30 377 netsh_wlan_show_profiles
-a---- 2019-03-04 00:36 43 netsh_wlan_show_profiles.txt
-a---- 2019-03-04 00:31 343 SO_54968726.ps1
-a---- 2019-03-04 00:36 34 SO_54968726.txt
-a---- 2019-03-03 23:02 328 SO_54972848.ps1
-a---- 2019-03-04 00:36 34 SO_54972848.txt
-a---- 2019-03-03 22:32 216 SU_1410873.cmd
-a---- 2019-03-04 00:36 33 SU_1410873.txt
-a---- 2019-03-04 00:36 27 test.txt
-a---- 2019-03-03 22:47 216 test.xml
-a---- 2019-03-04 00:36 30 testNew.txt
-a---- 2019-03-03 23:02 194 testNew.xml
> Select-String '^' *.txt
netsh_wlan_show_profiles.txt:1:Q:\Test\2019\03\03\netsh_wlan_show_profiles
SO_54968726.txt:1:Q:\Test\2019\03\03\SO_54968726.ps1
SO_54972848.txt:1:Q:\Test\2019\03\03\SO_54972848.ps1
SU_1410873.txt:1:Q:\Test\2019\03\03\SU_1410873.cmd
test.txt:1:Q:\Test\2019\03\03\test.xml
testNew.txt:1:Q:\Test\2019\03\03\testNew.xml
因此,不要将文件夹名称和扩展名添加到生成的文本文件中。问题解决了。请不要发布问题,要求我们对您在其他地方找到的代码进行琐碎的修复。安斯加,只是在实践中学习。这真是太棒了,谢谢!有没有办法按类型筛选出更多文件?要跳过所有媒体文件吗?只需更改Where对象筛选器以排除更多扩展名:{$\.Extension-notin'.txt'、'.mkv'、'.avi'、'.mp4'、'.jpg'、'.png'、'.wav'}我现在看到语法了。是否有一种方法可以使用PowerShell窗口打开时所在的文件夹名,而不必每次都键入路径名?@BadDogTitan要获取脚本当前运行的路径,可以使用$scriptPath=if$PSScriptRoot{$PSScriptRoot}else{Split path$script:MyInvocation.MyCommand.path}在这一点上,PowerShell函数远远超出了我的理解,LotPings。我尝试过你的脚本删除函数引用,但它不起作用。我有一些学习要做…请参阅更改的脚本和示例会话。
> Get-ChildItem
Directory: Q:\Test\2019\03\03
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2019-03-03 22:30 377 netsh_wlan_show_profiles
-a---- 2019-03-04 00:31 343 SO_54968726.ps1
-a---- 2019-03-03 23:02 328 SO_54972848.ps1
-a---- 2019-03-03 22:32 216 SU_1410873.cmd
-a---- 2019-03-03 22:47 216 test.xml
-a---- 2019-03-03 23:02 194 testNew.xml
> . .\SO_54968726.ps1
> New-TextRef
> Get-ChildItem
Directory: Q:\Test\2019\03\03
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2019-03-03 22:30 377 netsh_wlan_show_profiles
-a---- 2019-03-04 00:36 43 netsh_wlan_show_profiles.txt
-a---- 2019-03-04 00:31 343 SO_54968726.ps1
-a---- 2019-03-04 00:36 34 SO_54968726.txt
-a---- 2019-03-03 23:02 328 SO_54972848.ps1
-a---- 2019-03-04 00:36 34 SO_54972848.txt
-a---- 2019-03-03 22:32 216 SU_1410873.cmd
-a---- 2019-03-04 00:36 33 SU_1410873.txt
-a---- 2019-03-04 00:36 27 test.txt
-a---- 2019-03-03 22:47 216 test.xml
-a---- 2019-03-04 00:36 30 testNew.txt
-a---- 2019-03-03 23:02 194 testNew.xml
> Select-String '^' *.txt
netsh_wlan_show_profiles.txt:1:Q:\Test\2019\03\03\netsh_wlan_show_profiles
SO_54968726.txt:1:Q:\Test\2019\03\03\SO_54968726.ps1
SO_54972848.txt:1:Q:\Test\2019\03\03\SO_54972848.ps1
SU_1410873.txt:1:Q:\Test\2019\03\03\SU_1410873.cmd
test.txt:1:Q:\Test\2019\03\03\test.xml
testNew.txt:1:Q:\Test\2019\03\03\testNew.xml