我正在Pester上测试脚本。我不断收到“找不到路径”错误。 显然我的某些台词出了问题。
$userFolders = Get-ChildItem C:\Users -Directory
foreach($folder in $userFolders)
{
Get-ChildItem C:\Users\$folder\AppData\Local\Temp -Recurse | Remove-Item -Recurse -Force
Get-ChildItem C:\Users\$folder\AppData\Local\Google\Chrome\User Data\Default\Cache -Recurse | Remove-Item -Recurse -Force
}
Get-ChildItem C:\Windows\Temp -Recurse | Remove-Item -Recurse -Force
我似乎找不到错误所在,但我知道它在这里。 任何帮助将不胜感激。
答案 0 :(得分:2)
$folder
是一个对象。强制转换为字符串将为您提供文件夹名称。您可以使用引号来实现。
与Mark has identified一样,如果路径中有空格,您还需要引号。
$userFolders = Get-ChildItem C:\Users -Directory
foreach($folder in $userFolders) {
Write-Host "This is the folder object:"
$folder
Write-Host "This is folder object cast to string: $folder"
Get-ChildItem "C:\Users\$folder\AppData\Local\Temp" -Recurse | Remove-Item -Recurse -Force
Get-ChildItem "C:\Users\$folder\AppData\Local\Google\Chrome\User Data\Default\Cache" -Recurse | Remove-Item -Recurse -Force
}
Get-ChildItem C:\Windows\Temp -Recurse | Remove-Item -Recurse -Force
答案 1 :(得分:1)
其中一个路径中有一个空格,因此需要用引号引起来:
tableView()
它必须用双引号引起,以便Get-ChildItem "C:\Users\$folder\AppData\Local\Google\Chrome\User Data\Default\Cache" -Recurse | Remove-Item -Recurse -Force
变量仍能扩展。
答案 2 :(得分:0)
可能不是每个用户文件夹都有一个“ Google”子目录
QString str_array[2];
str_array[0] = QString("0x%1").arg(155, 2, 16, QLatin1Char('0'));
str_array[1] = QString("0x%1").arg(255, 2, 16, QLatin1Char('0'));
printf("%s \n", str_array[0].toLatin1().constData());
printf("%s \n", str_array[1].toLatin1().constData());
答案 3 :(得分:0)
其他答案指出了脚本中的主要缺陷是缺少引号。还有两种方式的冗余。
Get-ChildItem <something> | Remove-Item <something>
请考虑以下内容:
function Get-TempFolderItem {
foreach ($Local in (Get-ChildItem -Path "C:\Users\*\AppData\Local")) {
'Temp','Google\Chrome\User Data\Default\Cache' |
ForEach-Object { Get-ChildItem -Path "$Local\$_" -Recurse }
}
}
Get-TempFolderItem | Remove-Item -Force
这里,重复次数较少,如果您犯错了,简化了调试。而且,如果获取目录内容是详尽无遗的,则不必删除目录。
因为您是说这是在测试的上下文中进行的,所以您可能应该考虑进行模拟,例如删除文件。对于临时文件,删除不想要的内容并不重要,但是通常在测试时需要避免这种情况。
您可以通过编写
Mock Remove-Item {}
在Describe
块中。
希望这个答案对您有用。