You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible运行Windows dir命令报找不到dir.exe问题咨询

问题根因

dir是Windows下cmd.exe的内置命令,系统里根本没有对应的dir.exe独立可执行文件。
win_command模块的运行逻辑是直接去系统PATH里找你传入的命令名对应的可执行文件运行,不会自动套cmd的壳去加载内置命令,所以你直接写dir /b *.zip的时候,模块满世界找dir.exe找不到,自然就报你看到的错。
你跑的ad-hoc命令能成功执行,本质就是命令前显式加了cmd.exe /c,明确告诉系统要调用cmd解释器来执行后面的内置dir命令,刚好符合模块的执行要求,所以没报错。

修复方案

根据使用场景选下面任意一种即可:

  • 方案1:直接对齐ad-hoc的写法,给win_command里的命令加上cmd.exe /c前缀,显式指定用cmd执行内置命令,改完的任务配置如下:
- name: Get name of old file
  win_command: cmd.exe /c dir /b *.zip
  args:
    chdir: C:\temp

提示:后续只要你在win_command里要用管道、通配符、环境变量展开这类依赖命令解释器的语法,都需要加这个前缀,不然都会报找不到可执行文件的错。

  • 方案2:换用Ansible官方提供的win_find原生模块做文件匹配,不需要处理命令输出的格式兼容、转义问题,稳定性更高,写法如下:
- name: Get all zip files under C:\temp
  win_find:
    paths: C:\temp
    patterns: "*.zip"
  register: zip_file_list

执行完所有匹配到的zip文件信息都会存在zip_file_list.files变量里,直接遍历就能拿到文件名、路径、修改时间等属性,比跑命令解析输出靠谱得多。

不推荐直接换win_shell模块跑这个命令:win_shell虽然默认会加载命令解释器不会报找不到dir.exe的错,但shell类模块可控性、幂等性更差,能靠原生模块实现的需求优先用原生模块。

内容的提问来源于stack exchange,提问作者Chris F

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 12:54:26