Um guia de boas-vindas ao PowerShell contém os equivalentes do PowerShell dos comandos pwd
, cd
, ls
, find
, cp
, rm
, mkdir
, touch
, cat
, tail
, grep
, uname
, mkfs
, , ping
, man
e cut
:
https://mathieubuisson.github.io/powershell-linux-bash/
Além disso, é possível encontrar equivalências adicionais de outros comandos de linha de comando, como which , where , alias , wget , curl , type , %0 e até mesmo command overriding .
No entanto, ainda estou tendo problemas para descobrir como fazer uma for
declaração simples no Powershell. Por exemplo, o seguinte agruparia todos os arquivos com base no nome do arquivo, assumindo que cada nome de arquivo tenha um equivalente .txt:
set b=0
for %a in (*.txt) do set /a b=!b!+1 > NUL & echo (!b!) & dir /b %~na.*
Qual é o equivalente no PowerShell? O comando
ls *.txt | ForEach-Object {Split-Path -LeafBase -Path $_.Name}
lista os arquivos. No entanto, como passo o nome do arquivo para o dir /b %~na.*
comando? Parece que assim que fecho as chaves do comando For-Each-Object, os resultados querem passar como uma aglomeração, ao invés de poder processá-los uma linha por vez. E se eu adicionar outra camada ao redor do Split-Path, então ele $_
acaba sendo um objeto diferente, então não é possível separar o nome do arquivo da extensão.
EDIT: Existe uma maneira melhor de analisar os resultados um de cada vez? O for
comando foi sugerido nos comentários; Só tenho dificuldade em descobrir como fazer com que ele processe todo o arquivo *.txt; mas se isso fosse possível, talvez esse fosse o caminho a seguir?
A preferência é fazer isso a partir da linha de comando, sem precisar gravar em um arquivo, se possível.