提问人:Kaygol 提问时间:11/16/2023 最后编辑:Kaygol 更新时间:11/16/2023 访问量:55
使用 ForEach 从文本文件中删除项
Remove-item from text file using ForEach
问:
我有一个包含目录路径和文件名的文本文件(每行一个),示例如下
"\\servername\data01\My document\test.txt"
"\\servername2\hellofolder\10 to 1\files456.doc"
假设我在文本文件中有 10 个路径和文件名(所有不同的路径和文件夹)。 我想让powershell运行文本文件并删除文本文件中提到的文件夹中的所有文件。
我会直截了当地承认(我不擅长powershell)......所以我尝试了以下方法
$files = get-content -path C:\Temp\filestest.txt
forEach ($file in $files) {remove-item $file}
我收到以下错误
Remove-item:找不到路径 “C:\Windows\system32”\服务器名称\数据01\我的文档\测试.txt“' 因为它不存在。在 C:\Temp\RemoveFiles.ps1:2 字符:28
- forEach ($files中的$file) {remove-item -path $file}
~~~~~~~~~~~~~~~~~~~~~~~
- CategoryInfo:ObjectNotFound:(C:\Windows\syst...FSS0434281.msg“:String) [删除项], ItemNotFoundException(项目NotFound异常)
- FullyQualifiedErrorId:PathNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand
我相信所有的专家都可以告诉我哪里出了问题。 感谢您的帮助。
目前我正在做的是这个
$file="\\servername\Source01\Cases\Allegro\Export\client name\Email Collection 17Sep15\Native\00\69\emailmsg1.msg"
$file1="\\servername\Source01\Cases\Allegro\Export\Client name\Email Collection 17Sep15\Native\00\69\emailmsg2.msg"
$file2="\\servername\source02\Client name\searchable pdfs\004\pdf1.pdf"
$file3="\\servername\source02\Client name\searchable pdfs\004\pdf2.pdf"
$file4="\\servername\source02\Client name\searchable pdfs\004\pdf3.pdf"
然后
Remove-item -path $file
Remove-item -path $file1
Remove-item -path $file2
Remove-item -path $file3
Remove-item -path $file4
答:
0赞
Dilly B
11/16/2023
#1
您可以尝试使用以下命令
Get-Content C:\Temp\filestest.txt | ForEach-Object {Remove-Item $_}
$_ 保存循环的当前变量。
评论
0赞
Kaygol
11/16/2023
'''{Remove-Item $_}''' 也不起作用
0赞
Martin Brown
11/16/2023
#2
我认为问题是因为您的文件在每行的开头和结尾都有引号。请尝试以下操作:
$files = get-content -path C:\Temp\filestest.txt
forEach ($file in $files) { remove-item $file.Trim('"') }
另一种选择是将其视为CSV文件,如下所示:
Import-Csv .\filestest.txt -Header 'Path' | Remove-Item
评论
0赞
Kaygol
11/16/2023
尝试过,仍然相同的错误typescript $files = get-content -path C:\Temp\filestest.txt forEach ($file in $files) { remove-item $file.Trim('"') }
0赞
RetiredGeek
11/16/2023
从 OP 中的错误消息来看,“C:\Windows\System32”似乎被追加到文件的路径之前?我在代码中看不到它,但看起来这就是正在发生的事情。
0赞
Martin Brown
11/18/2023
@RetiredGeek 我的理论是,因为路径以引号开头,所以 remove-item 认为它们是相对的,并且位于当前目录的前面。
评论
data01
hellofolder
filetest.txt
C:\Windows\System32
lang-js "\\Servername\Source01\Cases\Allegro\Export\Client name\Email Collection 17Sep15\Native\00\18\emailmsg1.msg" "\\Servername\Source01\Cases\Allegro\Export\Client name\Email Collection 17Sep15\Native\00\18\emailmsg2.msg" "\\Servername\Source01\Cases\Allegro\Export\Client name\Email Collection 17Sep15\Native\00\18\emailmsg3.msg" "\\Servername\Source01\Cases\Allegro\Export\Client name\Email Collection 17Sep15\Native\00\18\emailmsg4.msg"