Я работаю над заданием 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 Больше подробностей.