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

shell for循环读取目录下csv文件报错的排查解决求助

问题原因
  • 你混用了Windows批处理和Linux Shell的语法:你写的for /r %%i是Windows批处理的专属写法,但你实际运行在Linux Shell(如Bash)环境中,两种环境语法不兼容,直接导致两个报错:
    1. $'/r' command not found:Shell中for命令没有/r参数,该参数是Windows批处理用来递归遍历目录的专属标识,Shell无法识别会将其当做独立命令尝试执行,触发该报错。
    2. Syntax Error near unexpected token '%%i':Windows批处理脚本中循环变量用双百分号%%i标识,但Shell中循环变量用$前缀标识,双百分号属于Shell无效语法,触发语法错误。
  • 额外问题:你代码中do "hello World" %%i里的"hello World"不是可执行命令,即使语法修正后运行也会报错,需要替换为你实际要执行的操作(比如打印文件名用echo,读取文件用cat等)。
解决方案

分两种运行环境给出对应正确代码:

环境1:Linux/Unix/macOS 运行(Bash环境)

仅遍历当前目录下的csv文件,不递归子目录

cd /tmp/Documents
for i in *.csv; do
  # 替换下方echo行为你实际需要的操作
  echo "处理文件:$i"
done

递归遍历当前目录及所有子目录下的csv文件

推荐兼容性更高的find写法:

find /tmp/Documents -type f -name "*.csv" | while read -r i; do
  # 替换下方echo行为你实际需要的操作
  echo "处理文件:$i"
done

环境2:Windows 运行(批处理脚本)

如果是存为.bat/.cmd脚本文件运行,修正后代码:

echo on
cd \tmp\Documents
:: 替换下方echo为你实际需要执行的命令
for /r %%i in (*.csv) do echo "hello World" %%i

如果你是直接在CMD窗口手动输入命令运行,不需要存为脚本,循环变量要改为单百分号:for /r %i in (*.csv) do echo "hello World" %i

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 15:15:03