Tentando conertar comando Unix para o comando do Windows

1

Estou trabalhando no trabalho de ETL, onde utilizamos o comando abaixo para obter os nomes dos arquivos da pasta e também as linhas de cada arquivo.

exec( '/usr/bin/ksh', '-c "cd [$PFileDir];/usr/bin/wc -l [$PFileName] > [$PFileDir]/ETL_FILE_LIST"',2);

Agora, quero a mesma funcionalidade no comando do Windows e não sei como fazer isso.

Qualquer ajuda será muito apreciada.

    
por user138770 27.09.2012 / 23:43

3 respostas

0

uma das primeiras coisas que você precisará é a ferramenta "wc" que está sendo usada para contar linhas - está no pacote textutils e pode ser encontrada aqui link

Eu sugiro que você converta isso em um arquivo batch - você não precisa executar um shell (o / usr / bin / ksh bit) no começo, tudo que você precisa fazer é chamar wc -l no arquivo correto e envie a saída para onde ela costumava ir.

Suspeite que a melhor maneira é começar do zero, brincar com o wc na linha de comando, acostumar-se a ele e depois construir o seu próprio comando. Parece que você estará usando mais alguns scripts em lote, então não estou planejando ensinar aqui:)

    
por 27.09.2012 / 23:57
0

Eu vou te dar meia resposta:

exec( '/usr/bin/ksh', '-c "cd [$PFileDir];/usr/bin/wc -l [$PFileName] >  [$PFileDir]/ETL_FILE_LIST"',2);
^^^^^^^^^^^^^^^^^^^    ^   ^^^^^^^^^^^^^^^    ^^^^^^^^^^^^^^^^^^^^^^     ^^^^^^^^^^^^^^^^^^^^^^^^^^
  launch a shell       |   change directory   count the number of lines    write it to $PFileDir/ETL_FILE_LIST
                   run a command              in $PFileName

Isso é tudo o que isso faz. Tudo o que você precisa fazer é encontrar um equivalente do Windows para:

  • Alterar diretório
  • Conte o número de arquivos em uma linha
  • Escreva a saída em algum lugar
por 28.09.2012 / 00:05
0

Se você estiver executando uma versão recente do Windows, o PowerShell deverá estar integrado. Você deve conseguir o que deseja com algo assim:

ls $PFileDir -Recurse -File | %{"{0} {1}" -f $_.Name, ((Get-Content $_.FullName | Measure-Object).Count)} >> (Join-Path $PFileDir 'ETL_FILE_LIst')

A chave está usando Measure-Object para substituir 'wc' como o contador de linha. Por favor, veja este artigo do Scripting Guy para mais detalhes.

    
por 28.09.2012 / 00:06

Tags