标签: powershell

删除除指定文件之外的所有文件夹和文件?

情况:

我有多个文件夹和文件,如下所示:

C:\Users\myname\Desktop\project1\english\folder1\file1
C:\Users\myname\Desktop\project1\english\folder1\file2
C:\Users\myname\Desktop\project1\english\folder1\file3
C:\Users\myname\Desktop\project1\english\folder2\file4
C:\Users\myname\Desktop\project1\english\folder2\file5
C:\Users\myname\Desktop\project1\chinese\folder1\file1
C:\Users\myname\Desktop\project1\chinese\folder1\file2
C:\Users\myname\Desktop\project1\chinese\folder1\file2
C:\Users\myname\Desktop\project1\chinese\folder2\file4
C:\Users\myname\Desktop\project1\chinese\folder2\file5
Run Code Online (Sandbox Code Playgroud)

目标:

我想删除除“folder1”和“file1”之外的所有文件夹和文件,这样我就只剩下这个:

C:\Users\myname\Desktop\project1\english\folder1\file1
C:\Users\myname\Desktop\project1\chinese\folder1\file1
Run Code Online (Sandbox Code Playgroud)

问题:

这可以用 Powershell 来完成吗?

我之前问过类似的问题,一位出色的用户建议了以下解决方案,但它只删除文件,而不删除文件夹。

$toKeep = "File1", "File3"
gci startFolder -Recurse | ? { !$_.PSIsContainer } | ? { $toKeep -notcontains $_.Name } | remove-item -WhatIf
Run Code Online (Sandbox Code Playgroud)

windows-7 file-management powershell

0
推荐指数
1
解决办法
8309
查看次数

移动项目或复制项目然后删除项目

我有一个文件列表,我想从一个文件夹移动到另一个位置并在新位置保留文件夹结构,例如我有以下文件 1.txt 2.txt 3.txt 位于如下

c:\1\1.txt
c:\2\2.txt
c:\3\3.txt

我想将项目移动到 d:\1\1.txt 和 d:\2\2.txt 等...

这样做的简单方法是什么?我有超过 10 万个文件需要从原始位置的某些文件夹移动到另一个位置,同时保持结构

我目前有需要移动的项目列表

windows powershell file-transfer

0
推荐指数
1
解决办法
1553
查看次数

PowerShell“.count”方法导致错误处理

我正在 PowerShell 中创建一个并不总是包含数据的数组(有时它是空的)。在尝试对数组对象执行任何操作之前,我需要验证数组是否包含数据。当我使用以下代码时,一切都按预期工作:

$Array = @(“This”,”is”,”a”,”test”)
$Array | ForEach-Object {
If ($Array.Count -ge 1)
    {
    [string]$A = $_
    Write-Host $A
    }
}
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,我得到以下输出:

This
is
a
test
Run Code Online (Sandbox Code Playgroud)

每次处理数组中的对象时,上面都会检查数组的.Count(因此它可能会检查数组的计数一千次或更多,具体取决于数组中的对象数量)。我想要做的是在开始处理数组对象之前只检查一次数组的计数。但是,以下代码没有提供正确的输出:

$Array = @(“This”,”is”,”a”,”test”)
If ($Array.Count -ge 1)
{
$Array | ForEach-Object {
    {
    [string]$A = $_
    Write-Host $A
    }
}
}
Run Code Online (Sandbox Code Playgroud)

当我运行上面的代码时,我得到以下输出:

    [string]$A = $_
    Write-Host $A

    [string]$A = $_
    Write-Host $A

    [string]$A = $_
    Write-Host $A

    [string]$A = $_
    Write-Host $A
Run Code Online (Sandbox Code Playgroud)

它不像前面的代码那样写托管$A变量的值,而是打印出实际的 PowerShell 代码本身。我所做的只是移动.Count检查,以便它在开始处理数组中的对象之前检查计数。为什么在 …

powershell powershell-2.0

0
推荐指数
1
解决办法
8235
查看次数

Windows + Powershell:如何更改所有 java.exe 实例的处理器关联性?

基于StackOverflow 上的这个问题,如果可执行文件仅在 1 个实例中运行,我可以使用以下命令更改处理器关联性:

PowerShell "$Process = Get-Process java; $Process.ProcessorAffinity=11"
Run Code Online (Sandbox Code Playgroud)

如果有 2 个或更多实例正在运行,我无法更改,这是输出

C:\PowerShell "$Process = Get-Process java; $Process.ProcessorAffinity=11"
The property 'ProcessorAffinity' cannot be found on this object. Verify that the property exists and can be set.
At line:1 char:30
+ $Process = Get-Process java; $Process.ProcessorAffinity=11
+                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyAssignmentException
Run Code Online (Sandbox Code Playgroud)

有谁知道如何使用 Powershell 更改所有 java.exe 实例的处理器关联性?

windows cpu powershell windows-server-2012

0
推荐指数
1
解决办法
7092
查看次数

用户:使用批处理或 powershell 重置所有用户密码?

我需要将本地机器(没有网络或域,只有机器)上的密码批量重置为单个密码;例如 %1Percent 。我想知道这是否可以通过批处理或电源外壳或某种脚本实现。

script powershell passwords batch vbscript

0
推荐指数
1
解决办法
1920
查看次数

我可以在不编写系统级代码的情况下检测 Windows 进程何时启动吗?

有没有什么办法可以通过性能监控、WMI 或者其他免费的工具来检测某个特定进程何时启动,或者更好的是,即将启动?然后,进一步捕获传递给该进程的入口点函数的命令行参数。

仅仅检测到该进程在某个时间已经启动并且已经在运行对于我的要求没有任何价值。我有 Visual Studio 启动 Chrome 进行调试会话,我想 a) 找出 VS 是否使用 cmd.exe 启动 Chrome,或 VS 内部的一些代码,以及 b) VS 传递给 Chrome 的哪些参数来配置它用于集成调试。

或者是否有某种方法可以使用 PowerShell 在进程映像(即 .exe 文件)上放置某种监视,以查看它何时被访问以执行?

windows monitoring powershell command-line process

0
推荐指数
1
解决办法
238
查看次数

重命名一批文件夹以遵循某种模式

所以我有一堆编号为1, 2, 3, 4, 5... 150. 我想更改这些文件夹的名称以遵循 3 位数字模式,因此它们变为001, 002, 003, 004,.. 050, 051.. 150. 但是,我不是 Bash 或 Powershell 中的佼佼者,因此我自己在做这件事时遇到了一些困难。我可以使用任何一种,因为我可以使用 PS 或 WSL 来完成任务。有人能指出我正确的方向吗?

powershell bash rename

0
推荐指数
1
解决办法
81
查看次数

Windows 10 - PowerShell 注册表驱动器无法正常工作

我使用的是 Windows 10 20H2,我在 PowerShell 桌面 5.1.19041.610 和 PowerShell Core 7.1.1 上成功地多次重现了这个问题,没有失败。

问题:Test-Path 仅适用于两个 PowerShell 注册表驱动器(缩短的注册表配置单元名称):

HKCU:HKLM:

它们分别是HKEY_CURRENT_USER和 的缩写HKEY_LOCAL_MACHINE

在 PowerShell 中,它们的全名是:

Registry::HKEY_CURRENT_USERRegistry::HKEY_LOCAL_MACHINE分别。

但是,有五个注册表配置单元,另外三个是:

HKEY_CLASSES_ROOTHKEY_CURRENT_CONFIGHKEY_USERS

他们的简称:

HKCR:HKCC:HKU:

Test-Path找不到驱动器,但Test-Path如果提供全名,则可以找到它们:

TEST-PATH HKCR:
TEST-PATH HKCU:
TEST-PATH HKLM:
TEST-PATH HKU:
TEST-PATH HKCC:
TEST-PATH REGISTRY::HKEY_CLASSES_ROOT
TEST-PATH REGISTRY::HKEY_CURRENT_CONFIG
TEST-PATH REGISTRY::HKEY_USERS
$PSVersionTable
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

在此处输入图片说明

我很好奇,我想知道它为什么会这样。

任何人都可以提供解释吗?

我已经确认其他三个驱动器也不适用于其他 cmdlet,我该如何使用这三个注册表驱动器?

windows-registry powershell windows-10

0
推荐指数
1
解决办法
148
查看次数

如何使用 PowerShell 创建唤醒脚本?

可能的重复:
可以打开电脑的闹钟软件?

我需要一些可以在早上叫醒某人的东西 - 基本上就像cronLinux 中的一个事件。我认为这需要在 PowerShell 中完成,我对此一无所知。要求是:

  1. 它必须在指定时间(例如 07:00 小时)将计算机从睡眠中唤醒。
  2. 它将在那时播放 iTunes(或其他程序)中的指定歌曲。

就是这样!还具有脚本的 *NIX 版本的答案将受到青睐。

unix windows-7 script powershell cron

-1
推荐指数
1
解决办法
4392
查看次数

Python 3.6 不能在 Windows 10 上运行

使用 Windows 10。

首先,我卸载任何现有版本的 Python 3 或 Python 2.0

https://www.python.org/ftp/python/3.6.0/python-3.6.0-amd64.exe

然后我运行上面的程序,Windows好像安装好了(我选择“Add Python 3.6 to the path”)。我点击“立即安装”。

我运行 Windows Powershell。

我输入 python3 并没有任何反应。

PS C:\Users\d> python
python : The term 'python' is not recognized as the name of a cmdlet, function, script file, or operable progr
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1
+ python
+ ~~~~~~
    + CategoryInfo          : ObjectNotFound: (python:String) [], CommandNotFoundException …
Run Code Online (Sandbox Code Playgroud)

windows powershell python windows-10

-1
推荐指数
1
解决办法
1万
查看次数

批处理文件中的 Powershell 命令:从文本文件中删除除带有“foo”和“bar”的行之外的所有行?

我有一个包含以下 3 行的文本文件:

This line contains foo.
This line contains bar.
This line has neither.
Run Code Online (Sandbox Code Playgroud)

我可以在“.bat”文件(在上面的“.txt”文件旁边)中运行以下命令,它会删除文本文件中的所有行,除了包含“foo”的行:

Powershell.exe -Command "gci *.txt | foreach { (cat $_.FullName | ? { $_ -like '*foo*' }) | set-content $_.FullName}"
Run Code Online (Sandbox Code Playgroud)

运行达到预期效果,在文本文件中只留下这一行:

This line contains foo.
Run Code Online (Sandbox Code Playgroud)

现在的问题是:如果我想保留行中包含“foo”“bar”的行怎么办?

到目前为止,我一定已经尝试了大约 40 或 50 种不同的组合,放置管道字符:*foo*|*bar*,去掉星号foo|bar,仅在开头和结尾放置星号:*foo|bar*,使用逗号,不使用逗号,使用分号,不使用分号,-like使用和不使用$_ 以及许多其他方式复制命令。

没有任何效果 - 到目前为止,在每次尝试中,我最终得到的文本文件看起来都一样,原始三行包含 foo(第 1 行)、bar(第 2 行)和两者都不包含(第 3 行)。

为了确保我没有编辑命令并出错,我会定期删除我的编辑并再次运行命令以取出没有“foo”的行并且它可以工作,或者我只是再次粘贴命令,再次测试,然后开始尝试编辑它以包含“bar”,但无济于事。

我最近已经问过这个问题,但我想我对标题的措辞不清楚。有人试图回答它,但他们提供的每个答案都没有奏效,至少当我将命令放入批处理文件并在文本文件旁边运行时,也许它对他们有用,使用不同的方法我是谁,我不知道。

请注意,我在批处理文件中使用了 powershell 命令!我没有在控制台中输入或使用 ps1 脚本。 我不需要做任何这些,因为我上面提到的第一个命令确实可以删除所有带有“foo”的行。

显然,既然这样做有效,该命令可以用作添加的基础,因此它可以在一个命令中处理“foo”和“bar”。 …

windows powershell batch command-line

-3
推荐指数
1
解决办法
46
查看次数