2012-05-28 5 views
0

Например, cd (echo ..) работает в powershell, но как мне заставить его работать в пакетном режиме (он сначала оценивает эхо, и поэтому команда эффективно cd ..)? mycommand.exe (ls -fi *.hs -exclude \"#*\" -name -r) - это то, что я на самом деле пытаюсь преобразовать (он отправляет завершенный, отфильтрованный список файлов до mycommand).Как контролировать порядок оценки?

ответ

1
setlocal enabledelayedexpansion 
set LIST= 
for /r %%F in (*.hs) do (
    set "FN=%%F" 
    if not "!FN:~0,1!"=="#" set LIST=!LIST! "%%F" 
) 
mycommand.exe !LIST! 

будет грубым переводом.

+0

Это работает, но есть ли способ сделать это без использования .bat-файла? I.e., только из cmd.exe? – joshj

+0

Не то, чтобы я знал. Возможно, вы можете поместить его в одну строку, но это было бы неплохо читать. – Joey

0

добавить $ символ для оценки команд в круглые скобки первых:

mycommand.exe $(ls -fi *.hs -exclude \"#*\" -name -r) 

или

ls -fi *.hs -exclude \"#*\" -name -r | mycommand.exe 

Если вы хотите, чтобы выполнить команду для каждого элемента, возвращенное из ваших Ls, вы можете:

ls -fi *.hs -exclude \"#*\" -name -r | %{mycommand.exe $_ } 
+0

Нет, я хочу первое поведение; вы знаете, как сделать то же самое из cmd.exe (dos shell), а не powershell? – joshj

+1

Я бы установил mingw и просто использовал 'xargs'. Самый дешевый способ получить легкую божественную доброту на окнах. Но вы можете просто попробовать 'dir | mycommand.exe' в DOS. –

+1

Это вздор. 'cmd' не является оболочкой Unix и, следовательно, не придерживается тех же правил. 'dir | mycommand' также сделает что-то совершенно другое. 'cmd' также не имеет ничего общего с DOS. – Joey

Смежные вопросы