2017-03-08 78 views
0

我想在Windows中执行简单的头部命令以查找第一个文件夹,如: dir/b/a-d | head -1窗口中的头部命令

我无法将addtional套件下载到本机,也无法使用PowerShell或其他脚本语言。

+0

在这种情况下,你不能。 – Seth

+0

@Seth是的,你可以 –

+0

@ Shaked看到我的回答 –

回答

1

cmdhead -n 1命令实现查找第一个文件夹

dir /b /ad | cmd /e /v /q /c"set/p.=&&echo(^!.^!" 

这只是管道dir命令的输出到一个单独的cmd实例(具有延迟扩展和扩展使能),将读出的第一输入并将其回显给控制台。

:通常这个工作没有问题,但在理论上有可能,所以如果正好执行set /pdir还在写第一行,但还没有结束,得到的切割线,这可能会失败。

+0

谢谢!这是非常有帮助的 – Shaked

0

在CMD您可以使用for /f获得第一非empy行命令的结果:

FOR /F "delims=" %G IN ('<command>') DO (echo %G && exit /B 0) 

对于示例将是:

FOR /F "delims=" %G IN ('dir /b /a-d') DO (echo %G && exit /B 0) 

我没有立即测试它的Windows机器,但它应该做的伎俩。另请注意,默认选项使for /f忽略以分号;开头的行(请参阅链接中的“eol”选项)。
如果你想在脚本中使用它,你将不得不使用%%G代替%G和使用goto语句

编辑:该for /f也可以用来read files(不是OP但相关的意向到问题)。阅读的第一行,然后basicly同样的事情(除了for /f的输入,这将是IN (<file>)而不是IN ('<command>')
如果希望第一nlines行的命令(同样的文件,只是改变了for /f的输入)更复杂的脚本将需要for /f

@echo off 
SetLocal EnableDelayedExpansion 
REM for this example, the first 5 lines 
set nlines=5 
set count=0 
FOR /F "delims=" %%G IN ('<command>') DO ( 
    set /a count+=1 
    IF !count! GTR %nlines% goto :afterLoop 
    echo %%G 
) 
:afterLoop 
EndLocal 

同样,此处的空行和那些开始用分号(取决于for /f的选项)将被忽略,(不是由for /f计数)。

+0

在这里,我们有一个完美的脚本示例。因此'或其他脚本语言'。这是一个原始的,但它会是脚本和海事组织它并不真正合格简单。这并不意味着它不是一个完善的解决方案,但是如果没有标准的开箱即用的命令来实现它,那么对于最初的问题的要求来说,真的没有太多的解决方案。 – Seth