0

我现在正试图用你的知识改进我的旧脚本

这是我的实际脚本

@echo off
SET DSESS=%CD:~22,6%
SET SSESS=P_S013
for /f %%i in ('dir /b /a-d %DSESS%_*.png') do (
convert %%i -resize 1500x1500 %%~ni.jpg
)

mkdir \\Nascfmj1\DOCNUM\partition\entier\%SSESS%\%DSESS%
move *.jpg \\Nascfmj1\DOCNUM\partition\entier\%SSESS%\%DSESS%

mkdir \\Nascfmj1\DOCNUM\partition\conservation\%SSESS%\%DSESS%
copy *.png \\Nascfmj1\DOCNUM\partition\conservation\%SSESS%\%DSESS%

copy *.pdf \\Nascfmj1\DOCNUM\partition\entier\%SSESS%

convert *0001.png -resize 1500x1500 %DSESS%_COUV.jpg
copy *_COUV.jpg \\Nascfmj1\DOCNUM\partition\pochette\%SSESS%

正如你所见,没有什么奢侈的

我从运行脚本I:\2013CAPTURE\b-p_98\P_1345 在实际情况下,如果我更改命名脚本的 ciontaining 文件夹将无法识别正确的路径(%CD:~22,6%

I:\2013CAPTURE\b-p_98\有一个从P_1000实际开始的文件夹列表中,P_1345 我可以从中运行脚本I:\2013CAPTURE\b-p_98\并告诉批处理进入每个文件夹,通过使用文件夹名称命名 DSESS 继续执行脚本吗?另请注意,文件夹内的所有文件都以这种类型命名 ( P_1000_0001.png)

感谢您的宝贵帮助

4

1 回答 1

0
@ECHO OFF
SETLOCAL
::
:: These are YOUR relative-root (base of scanning tree)
:: and destination
:: No idea where SSESS appears from... :(
::
SET SSESS=P_5013

SET relroot=I:\2013CAPTURE\b-p_98
SET dest=\\Nascfmj1\DOCNUM\partition

::
:: These are MY directories used for testing
::
SET dest=C:\destdir\%ssess%
SET relroot=u:\b-p_98

SET entier=%dest%\entier\%SSESS%
SET conservation=%dest%\conservation\%SSESS%
SET pochette=%dest%\pochette\%SSESS%

::
:: This is for a test - creating dummy files
:: 3 directories, 3 ".png" files in each, 
::
FOR /L %%i IN (1000,1,1002) DO (
 MD %relroot%\p_%%i
 FOR /L %%f IN (2000,1,2002) DO (
   dir>%relroot%\p_%%i\p_%%i_%%f.png
 )
)


::
:: Routine proper - create pochette
::
MD %pochette%
FOR /f %%a IN ('dir /ad/b "%relroot%\P_????" ' ) DO (
 PUSHD "%relroot%\%%a"
 FOR /f %%i IN ('dir /b /a-d P_*.png ') DO (
  CALL :CONVERT %%i -resize 1500x1500 %%~ni.jpg
 )

 MD %entier%\%%a
 move *.jpg %entier%\%%a

 mkdir %conservation%\%%a
 copy *.png %conservation%\%%a

 copy *.pdf %entier%

 CALL :convert *0001.png -resize 1500x1500 %%a_COUV.jpg
 copy *_COUV.jpg %pochette%

 POPD

)

GOTO :eof

::
:: I don't have CONVERT.EXE...
::
:CONVERT
ECHO execute command: CONVERT %*
::
:: Two different situations:
:: either create DUMMY .PDF and .JPG
:: OR DUMMY _COUV
ECHO %*|FINDSTR /i "couv" >NUL
IF ERRORLEVEL 1 (
DIR >%4
DIR >%~n4.PDF
) ELSE (
DIR >%4
)
GOTO :eof

这应该可以完成任务 - 好吧,如果没有,我几乎不会发布它,对吗?

我不知道 SSESS 来自哪里,所以我只是SET在文件的开头。

relroot设置为开始扫描dest的位置,以及将移动或复制文件的位置。我立即将它们重置为我的测试目录 - 我建议您设置一个类似的真实数据树进行测试。

然后计算entier,conservationpochette目录。

然后我在我的测试区域创建了一些虚拟的“.png”文件和目录。

我注意到你没有pochette在你的日常生活中做,所以我做了一个。

然后是主例程 - 每个目录名匹配 P_???? 在目录%relroot%中依次分配给%%a,所以%%a替换%DSESS%

PUSHD 更改为所选目录名,您应该熟悉该CONVERT命令。我调用了一个子程序来模拟创建a.jpg并同时制作了a .pdf

处理完.pngs 后,创建 的子目录entier并将适当.jpg的 s 移至其中。conservation与s相同的故事.pdf被复制到entier目录中。

最后,convert再次调用例程以完成*_couv.jpg文件,然后可以将其移动到pochette

POPD 恢复原始目录,我们继续,直到所有目录都完成。

所以这个例程可以从任何地方运行——不管当前目录是什么。

很好的测试!

高温高压

于 2013-04-04T15:34:18.530 回答