Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用powershell循环浏览一个文件夹中的文件,并使用这些名称创建txt文件_Powershell_Loops - Fatal编程技术网

使用powershell循环浏览一个文件夹中的文件,并使用这些名称创建txt文件

使用powershell循环浏览一个文件夹中的文件,并使用这些名称创建txt文件,powershell,loops,Powershell,Loops,我正在寻找一个脚本,为文件夹中的每个文件创建一个文本文件。.txt文件应使用该文件夹中每个文件的文件名,但扩展名应为.txt,而不是原始扩展名 我只需要在几个文件夹中执行此操作,因此我希望在该文件夹中打开PowerShell窗口,并在其中创建文本文件,而不必指定路径 我发现这一点很接近,但它将文件夹名称和扩展名添加到生成的.txt文件中 Get-ChildItem -Path "C:\Temp" -Recurse | ForEach { [System.IO.File]::WriteAl

我正在寻找一个脚本,为文件夹中的每个文件创建一个文本文件。.txt文件应使用该文件夹中每个文件的文件名,但扩展名应为.txt,而不是原始扩展名

我只需要在几个文件夹中执行此操作,因此我希望在该文件夹中打开PowerShell窗口,并在其中创建文本文件,而不必指定路径

我发现这一点很接近,但它将文件夹名称和扩展名添加到生成的.txt文件中

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