GVKun编程网logo

如何在特殊的PowerShell链命令4命令提示符?(powershell 命令提示符)

12

在本文中,您将会了解到关于如何在特殊的PowerShell链命令4命令提示符?的新资讯,同时我们还将为您解释powershell命令提示符的相关在本文中,我们将带你探索如何在特殊的PowerShell

在本文中,您将会了解到关于如何在特殊的PowerShell链命令4命令提示符?的新资讯,同时我们还将为您解释powershell 命令提示符的相关在本文中,我们将带你探索如何在特殊的PowerShell链命令4命令提示符?的奥秘,分析powershell 命令提示符的特点,并给出一些关于powershell – Windows命令提示符:如何获取当前目录中所有文件的计数?、PowerShell 脚本打开一个新的 PowerShell 窗口并运行命令、PowerShell入门教程之Cmd命令与PowerShell命令相互调用的方法、PowerShell入门教程之PowerShell和Cmd命令行的关系?的实用技巧。

本文目录一览:

如何在特殊的PowerShell链命令4命令提示符?(powershell 命令提示符)

如何在特殊的PowerShell链命令4命令提示符?(powershell 命令提示符)

通常,PowerShell命令可以用分号链接。 以下打开2个记事本:

PS> notepad; notepad

你也可以链接一个更复杂的语句:

PS> Add-Type -AssemblyName System.IO.Compression; ` > $src = "C:aFolder"; $zip="C:my.zip"; ` > [io.compression.zipfile]::CreateFromDirectory($src,$zip)

链式PowerShell命令也可以从CMD命令行调用:

C:> powershell notepad; notepad

本文描述了一个创build.Net 4.0 PowerShell提示符的方法,即使.Net 2.0是您的操作系统上的活动框架。 您创build一个.cmd脚本,并运行该脚本。 现在你在.Net 4.0环境中。

如何从桌面应用程序打开Windows资源pipe理器和search?

如何模拟慢读和慢读磁盘驱动器

如何查看是否对文件或文件夹select“包含可inheritance的权限”?

什么是Windows编程和它的前进方向? 老实说win32死了,不是吗?

从控制台进程读取

链接也适用于4.0提示:

C:> ps4.cmd PS> notepad; notepad

也可以从标准CMD提示符下运行:

C:> ps4 notepad; notepad

本文描述了一种将Add-Type到显式path名的方法(需要从ps4提示符引用4.0程序集):

Add-Type -Path "C:WindowsMicrosoft.NETassemblyGAC_MSILSystem.IO.Compression.FileSystemv4.0_4.0.0.0__b77a5c561934e089System.IO.Compression.FileSystem.dll"

即使在ps4提示符处链接时,也是如此:

C:> ps4 PS> Add-Type -Path "C:xSystem.IO.Compression.FileSystem.dll"; ` > $src = "C:xxl"; $zip="C:xxl.zip"; ` > [io.compression.zipfile]::CreateFromDirectory($src,$zip)

问题:在标准命令提示符下启动ps4时,链接上述语句失败(错误已完全显示在文章底部):

C:> ps4 Add-Type -Path "C:xSystem.IO.Compression.FileSystem.dll"; $src = "C:xxl"; $zip="C:xxl.zip"; [io.compression.zipfile]::CreateFromDirectory($src,$zip)

但是,以上所有方法都有效。 为什么? 我怎样才能做这个工作?

术语“C: x xl”不被识别为cmdlet,函数,脚本的名称

文件或可操作的程序。 检查名称的拼写,或者path是

包括,validationpath是正确的,然后再试一次。

在线:1个字符:73

+ Add-Type -Path C: x System.IO.Compression.FileSystem.dll; $ src = C: x xl <<<<; $拉链= C: X xl.zip;

[io.compression.zipfile] :: CreateFromDirectory($ src,$ zip)

+ CategoryInfo:ObjectNotFound:(C: x xl:String)[],CommandNotFoundException

+ FullyQualifiedErrorId:CommandNotFoundException

术语'C: x xl.zip'不被识别为cmdlet的名称,函数,

脚本文件或可操作的程序。 检查名称的拼写,或者path

包括在内,请validationpath是否正确,然后重试。

在线:1个字符:91

+ Add-Type -Path C: x System.IO.Compression.FileSystem.dll; $ src = C: x xl; $ zip = C: x xl.zip <<<<;

[io.compression.zipfile] :: CreateFromDirectory($ src,$ zip)

+ CategoryInfo:ObjectNotFound:(C: x xl.zip:String)[],CommandNotFoundException

+ FullyQualifiedErrorId:CommandNotFoundException

使用“2”参数调用“CreateFromDirectory”exception:“path不是

的法律forms“。

在线:1 char:138

+ Add-Type -Path C: x System.IO.Compression.FileSystem.dll; $ src = C: x xl; $拉链= C: X xl.zip;

[io.compression.zipfile] :: CreateFromDirectory <<<<($ src,$ zip)

+ CategoryInfo:NotSpecified:(:) [],MethodInvocationException

+ FullyQualifiedErrorId:DotNetMethodException

我如何告诉Windows预取文件?

为什么不同的计算机或操作系统上的文化date格式不同?

你如何保护自己免受内存消耗失控打破个人电脑?

Windows服务不能在冷启动时启动

Windowslogin的“使用条件”对话框

将菊花链命令传递到powershell.exe时,将删除字符串周围的双引号。 Add-Type不受此影响,因为路径不包含空格,所以它不需要引号:

Add-Type -Path C:xSystem.IO.Compression.FileSystem.dll # <- this works

但是,在一个赋值操作中,PowerShell需要将字符串用引号括起来,否则会将该字符串解释为命令并尝试执行它:

$src = C:xxl # <- this would try to run a (non-existent) command 'C:xxl' # and assign its output to the variable instead of assigning # the string "C:xxl" to the variable

这是导致您观察到的前两个错误的原因。 第三个错误是后续错误,因为两个路径变量未正确初始化。

你应该能够通过转义双引号来避免这种行为:

ps4 Add-Type -Path "C:xSystem.IO.Compression.FileSystem.dll"; $src = "C:xxl"; $zip="C:xxl.zip"; [io.compression.zipfile]::CreateFromDirectory($src,$zip)

或者用单引号替换它们(因为后者不被CMD识别为引用字符,因此按原样传递给PowerShell,它将它们识别为引号字符):

ps4 Add-Type -Path 'C:xSystem.IO.Compression.FileSystem.dll'; $src = 'C:xxl'; $zip='C:xxl.zip'; [io.compression.zipfile]::CreateFromDirectory($src,$zip)

但是,我建议不要解决这个问题,而是建议并运行适当的PowerShell脚本,以便完全避免这个问题:

#requires -version 4 [CmdletBinding()] Param( [Parameter(Mandatory=$true)] [string]$Path,[Parameter(Mandatory=$true)] [string]$Zipfile,) Add-Type -Assembly 'System.IO.Compression.FileSystem' | Out-Null [IO.Compression.ZipFile]::CreateFromDirectory($Path,$Zipfile)

脚本将像这样运行:

powershell.exe -File zip.ps1 -Path "C:xxl" -Zipfile "C:xxl.zip"

如果将执行策略更改为RemoteSigned或Unrestricted ,并且更改.ps1文件的默认处理程序,则甚至可以像这样运行脚本:

zip.ps1 -Path "C:xxl" -Zipfile "C:xxl.zip"

powershell – Windows命令提示符:如何获取当前目录中所有文件的计数?

powershell – Windows命令提示符:如何获取当前目录中所有文件的计数?

您将在cmd.exe中使用什么命令来查找当前目录中的文件数?

这里有powershell选项吗?

更新:我希望避免使用dir,因为我知道当前目录中有10,000个文件.想要避免枚举输出到cmd窗口.谢谢!

如果你想用cmd做,那么以下是完成它的简单方法:
set count=0 & for %x in (*) do @(set /a count+=1 >nul)
echo %count%

这是假设命令行.在批处理文件中,您可以这样做

@echo off
setlocal enableextensions
set count=0
for %%x in (*) do set /a count+=1
echo %count%
endlocal

这样可以做得更好一些.您可以批量删除> nul,因为如果从批处理文件运行,set / a将不显示结果 – 它直接从命令行执行.此外,for循环中的%符号必须加倍.

我见过很多人用find / c尝试漂亮技巧的例子.要非常小心,因为各种各样的事情可以打破这个.

常见错误:

>使用find / c / v并尝试查找从未包含在文件名中的内容,例如::.惯于.工作.可靠.当控制台窗口设置为光栅字体时,您可以获得这些字符组合.我可以在其全宽变体中包含文件名中的字符,例如:,?等,然后将其转换为正常的ASCII对应物,这将打破这一点.如果您需要准确的计数,请不要尝试这一点.
>使用find / c并尝试查找始终包含在文件名中的内容.显然点(.)是一个糟糕的选择.另一个答案表明

dir /a-d | find /c ":"

假设有关用户的语言环境的几个方面,并非所有这些都保证是真的(我已经留下了详细说明问题的评论)并且返回了太多的结果.

一般来说,你想在dir / b上使用find,它会切掉所有非文件名的东西,并以这种方式避免fencepost错误.

所以优雅的变体将是:

dir /b /a-d | find /c /v ""

它将首先输出所有文件名,每行一行.然后计算该输出中非空的所有行.由于文件名不能为空(除非我遗漏了一些东西,但Unicode不会根据我的测试将其绊倒).

PowerShell 脚本打开一个新的 PowerShell 窗口并运行命令

PowerShell 脚本打开一个新的 PowerShell 窗口并运行命令

试试这个命令

Start-Process powershell.exe -ArgumentList "-noexit"  



 Start-Process powershell -ArgumentList "-noexit","-noprofile","-command &{Get-Location}"

启动窗口最大化我们的参数-WindowStyle Maximized

提供更多代码以获取更多信息

PowerShell入门教程之Cmd命令与PowerShell命令相互调用的方法

PowerShell入门教程之Cmd命令与PowerShell命令相互调用的方法

     单独使用一种脚本来完成一项任务是理想的状态,而现实的情况往往是,因为历史原因、或者团队组成,你不得不将多种脚本或者程序组合在一起,来完成某项任务。本文的讨论范围是Cmd命令与PowerShell命令之间的组合与调用。

     毋庸置疑,Cmd命令与PowerShell命令之间的调用有两个方向。即在Cmd命令中调用PowerShell的命令,以及在PowerShell脚本中调用Cmd命令。需要说明的是,这里的调用分两个层次:一、简单的在其中一个的环境中执行另外一个命令,完成部分工作;二、在其中一个的执行上下文中调用另一个的命令,并根据返回结果来选择后面的逻辑。

在Cmd命令中调用PowerShell命令

如果只是在Cmd命令中调用PowerShell的命令,而不需要记录PowerShell的返回结果,是非常简单的。可以直接在Cmd命令或者脚本中执行类似一下命令:

复制代码 代码如下:

powershell echo "Hello"

执行上述命令的时候,Cmd是把PowerShell当成一个应用程序来执行的。      

在Cmd命令中调用PowerShell的命令并获得返回值的可行方法并不多。这是因为,Cmd命令对于结果的处理往往需要借助于文件读写,很少有机会在各个命令之间传递数据,并保存中间结果的。For命令是其中最好的一个方法,它的指向方法如下:

复制代码 代码如下:

for /f  %i in (''powershell echo "Hello"'') do (set a=%i)

以上命令的执行结果是%a%被赋值为Hello。当然,如果只是简单赋值,就没有必要这样大费周折。调用PowerShell的命令,肯定是看中了它强大的编程能力,比如自定义的排序等等。

  我遇到的一个实际的例子是这样的:文件服务器上有一个目录,里边放着一些按年月命名的目录。因为这个目录结构已经确定下来了,而且很多组都在使用,不能随便改动。我们有一个任务就是每天定时去最新的年月目录里拷贝build。麻烦的是,第一、文件夹时按照12.1、12.2。。。12.10、12.11、12.12、13.1。。。这样命名的;第二、从时间上没法找,因为最新的目录不是在月底,而是在月中的某一天生成的。以Cmd命令有限的编程能力,肯定是不好解决这个问题的。我最终写了一个PowerShell的脚本文件,在Cmd的脚本中调用,终于解决了这个问题。

在PowerShell命令中调用Cmd命令

       由于PowerShell强大的管道功能,在PowerShell命令或者脚本中调用Cmd命令并获得返回结果是件很容易的事情,是否获得结果对于调用Cmd命令的方式也没有影响。请看如下示例:

复制代码 代码如下:

cmd /c dir
$a = (cmd /c dir)
$a

以上示例中,第1行的执行结果,和后两行的执行结果是一样的。不同点是,后者的执行结果被保存了下来,前者只是将结果打印在屏幕上。

  为什么需要在PowerShell中调用Cmd命令呢(既然PowerShell有如此强大的Shell以及编程特性)?其实原因也很简单。在PowerShell之前我们有很多很好用的Cmd命令、工具和控制台程序,如果完全丢弃他们并使用PowerShell重写的话,那绝对是浪费。要知道,能够利用最小的改变来高效地完成任务,才是我们的目标。

结语

  一个新的语言,如果不能与已有的资源兼容和沟通,那么它注定不能成为大众的选择(也许可能在小众中流行),最终将被遗弃和忘记。PowerShell与现有系统良好沟通性有目共睹,从它与Cmd命令的关系可见一斑。

您可能感兴趣的文章:

PowerShell入门教程之PowerShell和Cmd命令行的关系?

PowerShell入门教程之PowerShell和Cmd命令行的关系?

PowerShell是命令行的加强版吗?PowerShell能执行命令行的所有命令吗?PowerShell要替代命令行?这三个问题的答案足以让我们了解PowerShell与Cmd命令行之间的关系。让我们慢慢道来。。。

PowerShell中的CMD命令

启动PowerShell,在其中输入几个常用的Cmd命令

复制代码 代码如下:

PS D:\Projects\Practise\PowerShell> dir
    Directory: D:\Projects\Practise\PowerShell
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----         1/23/2013  12:35 PM            d1
d----         1/23/2013  12:35 PM            d2
-a---         1/21/2013   8:38 PM      36314 alias.txt
-a---         1/21/2013   8:32 PM     241530 cmdlets.txt

或者
复制代码 代码如下:

PS D:\Projects\Practise\PowerShell> cd ..
PS D:\Projects\Practise>

结果跟我们的预期是差不多。不过,我们是否就能据此说PowerShell就是PowerShell是命令行的加强版吗?再试试下面这个命令:
复制代码 代码如下:

PS D:\Projects\Practise\PowerShell> dir /ad
dir : Cannot find path ''D:\ad'' because it does not exist.

这个跟我们的期望相去甚远。在Cmd中,它应该输出当前位置的子文件夹的信息,但是这里,它似乎理解不了我们的参数。下面这个命令也是一样:

复制代码 代码如下:

PS D:\Projects\Practise\PowerShell> fc .\alias.txt .\cmdlets.txt
Format-Custom : A positional parameter cannot be found that accepts argument ''.\cmdlets.txt''.

我本来想要调用比较两个文件的fc命令,结果它却理解成了Format-Custom,牛头不对马嘴。这是怎么回事儿呢?到这里我们就可以回答前两个问题了:PowerShell不能执行Cmd命令行的所有命令,确切地说,PowerShell不能执行任何Cmd命令,至少不能直接执行。这是因为,PowerShell不是Cmd的新版本或者加强版什么的,只是它的有些命令从长相到功能都跟Cmd命令很相似而已。

PowerShell与Cmd命令行的关系

  PowerShell可以做为一个应用程序在Cmd中运行,其运行方式有点像在Cmd中运行SQLCmd或者Nslookup,在没有明确exit退出之前,一直是应用程序的运行环境,一切的输入,包括命令和数据,都由应用程序来接受和处理。

复制代码 代码如下:

D:\Projects\Practise\PowerShell>powershell
Windows PowerShell
Copyright (C) 2012 Microsoft Corporation. All rights reserved.

PS D:\Projects\Practise\PowerShell> get-help

TOPIC
    Windows PowerShell Help System

Cmd也可以在PowerShell中作为应用程序运行,其运行方式与在Cmd中运行PowerShell相似:

复制代码 代码如下:

PS D:\Projects\Practise\PowerShell> cmd
Microsoft Windows [Version 6.2.9200]
(c) 2012 Microsoft Corporation. All rights reserved.

D:\Projects\Practise\PowerShell>dir /ad
Volume in drive D is Doc
Volume Serial Number is A6C5-E7CE

Directory of D:\Projects\Practise\PowerShell

01/30/2013  04:54 PM    <DIR>          .
01/30/2013  04:54 PM    <DIR>          ..
01/23/2013  12:35 PM    <DIR>          d1
01/23/2013  12:35 PM    <DIR>          d2

PowerShell通过Alias这个特性,可以让使用者以Cmd风格来使用PowerShell命令。这样做的好处是让用户在刚接触PowerShell的时候,就像在使用Cmd一样亲切、熟悉。坏处是,让人容易把PowerShell和Cmd搞混了。不过当你了解了Alias的概念和Get-Alias命令以后,这个问题将迎刃而解:

复制代码 代码如下:

PS D:\Projects\Practise\PowerShell> get-alias dir, echo, type

CommandType     Name                                               ModuleName
-----------     ----                                               ----------
Alias           dir -> Get-ChildItem

Alias           cd -> Set-Location
Alias           echo -> Write-Output

就是说dir实际上是PowerShell的Get-ChildItem命令的一个别名,cd是Set-Location的别名。。。到这里PowerShell和Cmd的关系问题算是解决了。

Cmd命令行会被PowerShell替代吗?

  我其实一直以来都很讨厌类似“谁不如谁好”、“谁要代替谁”的问题,放到这里也一样,新的东西必然有它的优越性,旧的东西也有一票粉丝。从现在PowerShell被接受的程度来看,短时间内Cmd不会被PowerShell替代。长远来看呢,谁知道呢。我只知道,多一份选择就多一份自由,多一种可能性。

您可能感兴趣的文章:
  • 浅谈CMD和win powershell的区别
  • PowerShell中运行CMD命令的技巧总结(解决名称冲突和特殊字符等问题)
  • 在cmd中直接运行PowerShell脚本文件的方法
  • PowerShell入门教程之Cmd命令与PowerShell命令相互调用的方法
  • 你应该选择 Powershell 的10个理由(抛弃 cmd)
  • powershell与cmd的异同汇总

今天关于如何在特殊的PowerShell链命令4命令提示符?powershell 命令提示符的分享就到这里,希望大家有所收获,若想了解更多关于powershell – Windows命令提示符:如何获取当前目录中所有文件的计数?、PowerShell 脚本打开一个新的 PowerShell 窗口并运行命令、PowerShell入门教程之Cmd命令与PowerShell命令相互调用的方法、PowerShell入门教程之PowerShell和Cmd命令行的关系?等相关知识,可以在本站进行查询。

本文标签: