Назад | Перейти на главную страницу

Попытка преобразовать команду Unix в команду Windows

Я работаю над заданием ETL, где мы использовали приведенную ниже команду, чтобы получить имена файлов из папки, а также подсчитать строки для каждого файла.

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

Теперь мне нужна такая же функциональность в команде Windows, и я не знаю, как это сделать.

Любая помощь будет высоко оценена.

одна из первых вещей, которые вам понадобятся, это инструмент "wc", который используется для подсчета строк - он находится в пакете textutils и может быть найден здесь http://gnuwin32.sourceforge.net/packages.html

Я предлагаю вам преобразовать это в пакетный файл dos - вам не нужно запускать оболочку (бит / usr / bin / ksh) в начале, все, что вам нужно сделать, это вызвать wc -l в нужном файле, и отправьте вывод туда, где он был раньше.

Подозреваю, что лучший способ - начать с нуля, поиграть с wc в командной строке, привыкнуть к нему, а затем создать свою собственную команду. Похоже, вы будете использовать еще несколько пакетных сценариев, поэтому я не планирую вас здесь учить :)

Я дам вам половину ответа:

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

Вот и все. Все, что вам нужно сделать, это найти эквивалент Windows:

  • Сменить каталог
  • Подсчитайте количество файлов в строке
  • Напишите где-нибудь вывод

Если вы используете последнюю версию Windows, PowerShell должен быть встроен. Вы должны иметь возможность добиться желаемого с помощью чего-то вроде этого:

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

Ключ заключается в использовании Measure-Object для замены wc в качестве счетчика строк. Посмотри пожалуйста эта статья Scripting Guy Больше подробностей.