因此,我试图一次从包含2000个文件的目录中取出一个文件,然后将其移动到另一个目录中,以供其余脚本处理。该脚本在下面。现在,我知道gswin64行在单独运行时可以工作,我为其指定了文件名,但是我不确定该变量是否可用。但是,当我运行此脚本时,它将在运行脚本的其余部分之前将目录输入中的所有文件复制到目录中。我如何使其一次执行一次,然后在复制其余文件之前处理脚本?
for /F "delims=" %%I in ('dir "H:\documents\gs\input\*.*" /A-d /B /O:-D') do (move "H:\documents\gs\input\%%I" "H:\documents\gs\working"&goto filemoved)
:filemoved
您的原始代码将尝试执行move "H:\documents\gs\input\*.*" "H:\documents\gs\working"
,这就是为什么所有文件都被移动的原因。您需要执行的是使用switch参数执行目录列表命令,并将其提供给for /f
。这种形式dir
只会显示名称。因此,您需要在move
命令中包括源目录名称。您还需要具有"delims="
确保正确处理包含分隔符的文件名的选项,以及/a-d
切换目录以确保不包括目录名的选项。由于您按相反的日期排序,因此将首先选择最新的文件。移动第一个文件后,您需要中止for
循环,否则它将继续处理整个列表,并传输每个文件。这里的简单方法是简单地goto
下一行有一个标签。
您还使用了文件*.*
掩码,该文件掩码将处理所有文件,而不管扩展名如何。由于您似乎只想处理.pdf
文件,因此您可能应该更改该文件掩码以适合。
for /F "delims=" %%x in ('dir H:\documents\gs\working\*.pdf /b') do set "FileName=%%x"
同样,dir
如果使用,则需要执行命令for /f
。没有明显的理由为什么您不会使用更简单的方法
for %%x in (H:\documents\gs\working\*.pdf) do set "FileName=%%x"
无论哪种情况,您都可能只需要name
文件的一部分,因此FileName
应将其设置为%%~nx
,而不是%%x
。
"C:\program files\gs\gs9.20\bin\gswin64" -o H:\documents\gs\output\"%FileName%" -sDevice=pdfwrite -dFitPage -dFIXEDMEDIA H:\documents\gs\working\"%FileName%"
不平衡引号-可执行文件的完整路径名必须用引号引起来,因为它包含分隔符。之后\
可能需要去除杂散空间。
最好用imho引用整个文件名,包括驱动器和路径,而不是仅引用文件名。
del /q H:\documents\gs\working\*.*
rm
不是批处理命令。请注意,此命令将删除其中的所有文件,H:\documents\gs\working
而不仅仅是.pdf
您似乎正在处理的文件。
goto start
该空间是必需的。gotostart
不是内置命令。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句