Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 一次对每个文件执行多个批处理命令_Loops_Batch File - Fatal编程技术网

Loops 一次对每个文件执行多个批处理命令

Loops 一次对每个文件执行多个批处理命令,loops,batch-file,Loops,Batch File,如何逐个为多个文件执行多个批处理命令。也就是说,如果我想首先将一个文件从一个文件夹移动到一个工作文件夹,将该文件重命名为csv格式,调用一个sqlloader脚本,调用第二个sql脚本,最后调用另一个sql脚本,那么上面的所有步骤都不应该针对所有文件,而是一次针对一个文件。我尝试了以下类似的方法,但此时出现了\Downloads\Validation\Prestage*.psa错误。我不能在循环条件中传递通配符*.psa吗 非常感谢并感谢您在这方面花费的时间 echo off

如何逐个为多个文件执行多个批处理命令。也就是说,如果我想首先将一个文件从一个文件夹移动到一个工作文件夹,将该文件重命名为csv格式,调用一个sqlloader脚本,调用第二个sql脚本,最后调用另一个sql脚本,那么上面的所有步骤都不应该针对所有文件,而是一次针对一个文件。我尝试了以下类似的方法,但此时出现了\Downloads\Validation\Prestage*.psa错误。我不能在循环条件中传递通配符*.psa吗

非常感谢并感谢您在这方面花费的时间

    echo off

    :MAIN


    copy C:\Downloads\Prevalidation\*.psa C:\Downloads\Validation\Prestage\

    FOR %A IN (C:\Downloads\Validation\Prestage\*.psa) DO ( move C:\Downloads\Validation\Prestage\*.psa C:\Downloads\Validation\WIP\
      ren C:\Downloads\Validation\WIP\*.psa *.csv
    <call sqlloader now>
    <call update script now> 
    <call validation script now> 
   )

   exit
谢谢,
桑德斯。

你的策略是正确的

有一个小的语法错误:您需要在BAT文件内的FOR命令中使用%%A而不是%A。然后您需要在循环中引用%%A作为正在处理的文件的名称

@echo off
copy C:\Downloads\Prevalidation\*.psa C:\Downloads\Validation\Prestage\
FOR %%A IN (C:\Downloads\Validation\Prestage\*.psa) DO ( 
  move %%A C:\Downloads\Validation\WIP\%%~nA.psa
  ren C:\Downloads\Validation\WIP\%%~nA.psa *.csv
  <call sqlloader now>
  <call update script now> 
  <call validation script now> 
)

谢谢你的回复。但是,我在执行脚本时仍然遇到语法错误。这是我的脚本-echo off:MAIN copy C:\Downloads\Prevalidation*.psa C:\Downloads\Validation\Prestage*.psa确实移动%%A C:\Downloads\Validation\WIP\%%~nA.psa psaload.csv调用C:\CAP\SPS\Batchscripts\runloader.bat调用C:\CAP\u SPS\Batchscripts\runupdate.bat调用C:\CAP\u SPS\Batchscripts\runvalidation.bat del C:\Downloads\Validation\WIP\psaload.csvexit@user982201:我建议在move和ren命令的名称周围使用引号,如move%%A C:\Downloads\Validation\WIP\%%~nA.psa@user98822哪个命令失败?。。。在所有命令前面加上echo并在filename.PA周围加引号-重命名文件时失败。作为命令语法的错误消息不正确。我想我知道原因。上面的循环未按预期工作。它将所有*.psa文件从Prestage文件夹移动到WIP文件夹,然后程序无法理解重命名为哪个文件,因为我正在传递一个目标文件名,以运行我的加载程序脚本和随后的其他脚本。那么,回到我的第一个问题——如何为文件夹位置中的每个文件运行一系列命令,而不是一次运行所有文件?