如何根据输入文件命名输出文件?

How to name output file with respect to input file?

我有大约 100 个输入文件,经过处理后生成了 2000 多个输出文件。我想根据输入文件的名称命名输出文件。

这是命令我运行:

Start cmd /k "G:Path\eachGeo.bat G:\Path\InputGeo\*.csv"

通过执行 .bat 文件,通过 cmd 读取输入文件。输出存储在不同的路径:

outputfilename = 'Path\outputGeo\' + Time.now.to_i.to_s + 
                 '_' + eachTag[45..54] + '_output.csv'

在上面的代码中,我使用 Time.now.to_i.to_s 根据当前系统时间命名输出文件。

我想将其更改为输入文件的名称。

通常你会像这样处理它,你使用 File.basename 之类的东西来提取原始文件路径的相关部分:

Dir.glob("path/*.csv") do |path|
  CSV.open(path) do |csv_in|
    # ...

    out_path = "output_path/%s_%s.csv" % [
       File.basename(path, ".csv"),
       each_tag[45..54]
    ]

    CSV.open(out_path, "w") do |csv_out|
      # ...
    end
  end
end

这是一个非常简单的例子。我会避免将输出文件与输入文件放在同一目录中,这样当您第二次 运行 程序时就不会错误地再次读取它们。