我现在正试着用你的知识改进我的旧剧本
这是我的实际脚本
@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\
运行脚本并告诉批处理进入每个文件夹,通过nanming DSESS继续编写文件夹名称的脚本吗?另请注意,在该文件夹中,所有文件都以此错字(P_1000_0001.png
)命名
感谢您的宝贵帮助
丹
答案 0 :(得分: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
,conservation
和pochette
目录。
然后我在我的测试区域创建了一些虚拟的“.png”文件和指令。
我注意到你没有在你的日常生活中做pochette
,所以我做了一个。
然后是主程序 -
每个目录名匹配P _ ????目录%relroot%
依次分配给%%a
,因此%%a
取代%DSESS%
PUSHD更改为所选的目录名,您应该熟悉CONVERT
命令。我调用了一个子程序来模拟.jpg
的创建并同时创建.pdf
。
处理.png
后,会生成entier
的子目录,并移动相应的.jpg
。与conservation
相同的故事和.pdf
被复制到entier
目录。
最后,再次调用convert
例程来完成*_couv.jpg
文件,然后可以将其移至pochette
POPD恢复原始目录,我们将继续,直到完成所有目录。
所以这个例程可以从任何地方运行 - 当前目录是什么并不重要。
良好的测试!
HTH