如何将特定类型的所有文件复制到压缩文件中


0

我想找到我的所有三个分区C,D和F的所有* .pdf文件(包括具有相同名称的pdf),并将它们放入.rar或.zip中。当我开始时,我只是想将pdf复制到一个文件中,但我意识到这还不足以满足我的需求。

谁能给我任何指示?我这样写:

mkdir d:\test
mkdir f:\test1
chcp 65001
XCOPY C:\*.pdf D:test /S /H
XCOPY F:\*.pdf D:test /S /H    
XCOPY D:\*.pdf F:test1 /S /H
copy f:\test1 d:\test\kra\

1
您研究或尝试过什么?这些PDF文件是否在每个驱动器上的特定目录中?还是在整个驱动器中?
CharlieRB 2013年

是否必须通过命令行或批处理文件来完成?您是否真的需要将所有PDF复制/移动到单个目录(每个驱动器)?您要为每个驱动器创建一个单独的归档,还是为一个单独的大量归档创建一个归档?
卡兰2013年

为了让我自己编写代码,我的代码可以正常工作,但是它们在使用同名pdf文件时有问题,在这种情况下,我也想把它们也放进去。幸运的是,我想从零开始重新开始会更好。至于pdf文件,它们都在我的电脑周围,我希望它们全部都具有3个驱动器C,D和F
Psema

为了karan,我更喜欢通过批处理文件来做,我希望使用所有的pdfs来做一个巨大的存档。至于单独的副本,我不知道它是否真的需要,我对cmd的想法
还很陌生

如果任何答案都解决了您的问题,则可以通过单击答案左侧的对勾标记来表示您已接受该答案(单击时,该对勾标记将从白色变为绿色)。如果“几乎”有一些答案对您有用,那么您可以发表评论以寻求更多帮助。
凯文·费根

Answers:


0

下载并安装归档和压缩实用程序7-zip

然后对每个源目录运行以下命令:

"C:\Program Files\7-Zip\7z.exe" a pdfArchive.7z -r d:\test\*.pdf

7z.exe是7-zip的命令行版本。运行7z.exe -?以了解所有选项和开关。


谢谢队友,我会尝试一下。我已经安装了它,我正在阅读如何在cmd中运行它:)
Psema

0

这是一个批处理脚本,可满足您的需要。

您没有提到在重复的path \ filename.pdf(来自不同驱动器)的情况下想要发生的情况。

因此,如果发现重复,我要做的是在文件名的末尾添加一个唯一的数字。

例如,如果您有以下文件:

C:\Dir\A.pdf
C:\Dir\B.pdf
C:\Dir\B-1.pdf
C:\Dir\B-2.pdf
C:\Dir\C.pdf
C:\Dir\C-1.pdf
F:\Dir\A.pdf
F:\Dir\B.pdf
F:\Dir\C.pdf

并且您的目标路径是:

"D:\Test"

然后脚本将复制:

C:\Dir\A.pdf -> D:\Test\Dir\A.pdf
C:\Dir\B.pdf -> D:\Test\Dir\B.pdf
C:\Dir\B-1.pdf -> D:\Test\Dir\B-1.pdf
C:\Dir\B-2.pdf -> D:\Test\Dir\B-2.pdf
C:\Dir\C.pdf -> D:\Test\Dir\C.pdf
C:\Dir\C-1.pdf -> D:\Test\Dir\C-1.pdf
F:\Dir\A.pdf -> D:\Test\Dir\A-1.pdf
F:\Dir\B.pdf -> D:\Test\Dir\B-3.pdf
F:\Dir\C.pdf -> D:\Test\Dir\C-2.pdf

最初,脚本将仅显示要复制的文件。一旦确定将正确的文件复制到正确的路径,请对脚本进行此更改...

查找此行(在顶部附近):

set zzlive=0

并将其更改为:

set zzlive=1

此外,您会发现一些行,例如:

set zztarget1="C:\*%zzftype%"
set zztarget2="F:\*%zzftype%"
set zztarget3="D:\*%zzftype%"

根据需要添加任意数量的“文件夹” ...依次编号。


脚本运行时,这些行将“扩展”为:

set zztarget1="C:\*.pdf"
set zztarget2="F:\*.pdf"
set zztarget3="D:\*.pdf"

最后,查找如下所示的行:

rem Create .zip

在该行下面,添加命令来创建“ .zip”文件,但是要执行此操作,具体取决于要将“ .zip”文件放置在何处以及所需的其他“ .zip”文件选项。如果您需要帮助,请告诉我一些细节,我会为您提供帮助。


如果您需要更多信息,或者需要脚本以其他方式工作,请告诉我。

这是脚本:


@echo off


rem set "live" (or "test"). 0=test, 1=live
set zzlive=0


rem    set "Test" folder
set "zzhold=D:\test"


rem    set File type to process
set "zzftype=.pdf"


rem set targets
set zztarget1="C:\*%zzftype%"
set zztarget2="F:\*%zzftype%"
set zztarget3="G:\*%zzftype%"
rem set more targets, up to 10 ...


rem    set "Subst" drive. Use *ANY* unused drive letter
set "zzsubst=V:"

rem **********************************
rem probably do not need to edit lines below here
rem just find "rem Create .zip" line and add your zip command there
rem **********************************

rem    insure test folder exists
md "%zzhold%">nul 2>&1


rem    make Substituted drive so XCOPY won't complain about cyclical copy
if exist "%zzsubst%\*.*" goto :start
subst %zzsubst% "%zzhold%"
if exist "%zzsubst%\*.*" goto :start
echo Error "Subst-ing" drive %zzsubst%
goto :EOF





:start
rem:start

set zztarget=%zztarget1%
for %%e in (%zztarget%) do if "%%~e."=="." goto :done
call :work

set zztarget=%zztarget2%
for %%e in (%zztarget%) do if "%%~e."=="." goto :done
call :work

set zztarget=%zztarget3%
for %%e in (%zztarget%) do if "%%~e."=="." goto :done
call :work

set zztarget=%zztarget4%
for %%e in (%zztarget%) do if "%%~e."=="." goto :done
call :work

set zztarget=%zztarget5%
for %%e in (%zztarget%) do if "%%~e."=="." goto :done
call :work

set zztarget=%zztarget6%
for %%e in (%zztarget%) do if "%%~e."=="." goto :done
call :work

set zztarget=%zztarget7%
for %%e in (%zztarget%) do if "%%~e."=="." goto :done
call :work

set zztarget=%zztarget8%
for %%e in (%zztarget%) do if "%%~e."=="." goto :done
call :work

set zztarget=%zztarget9%
for %%e in (%zztarget%) do if "%%~e."=="." goto :done
call :work

set zztarget=%zztarget10%
for %%e in (%zztarget%) do if "%%~e."=="." goto :done
call :work


goto :done




:work
rem:work

@echo.
if %zzlive% EQU 0 echo Test mode - no files will be copied.
echo.|set /P "zzdummy=Gathering filenames, Please wait... "
set zzstart=0


rem get list of files to copy and pass each filename one to :work1

for /f "usebackq delims=>" %%f in (`xcopy /s /f /l /h %zztarget% "%zzsubst%\"`) do call :work1 "%%~f"
@echo.

goto :EOF





:done
rem:done

rem Create .zip
rem put your desired command to create your ".zip" file here.



rem go clear environment vars and exit
goto :cleanup





:work1
rem:work1

if not %zzstart% EQU 0 goto :work1b

@echo Complete - processing files.
@echo.
set zzstart=1
goto :work1b





:work1b
rem:work1b

set "zz1t=%~1"
set "zz1fullfn=%zz1t:~0,-2%"
set zz1t=%zz1fullfn:~-4%
rem @echo [%zz1fullfn%]  [%zz1t%]



rem skip lines not containing a valid .pdf filename
if "%zz1t%."=="." goto :EOF
if /I not "%zz1t%"==".pdf" goto :EOF



rem don't process files in "Test" folder
for /f "usebackq delims=" %%g in (`echo set "zz1t=%%zz1fullfn:%zzhold%\=%%"`) do %%~g
if "%zz1fullfn%."=="%zz1t%." goto :work2

rem We are trying to process a file in the "Test" folder... skip it.
rem     @echo.
rem     echo Skipping file: [%zz1fullfn%]

goto :EOF





:work2
rem:work2

rem echo Processing file: [%zz1fullfn%]
for %%g in ("%zz1fullfn%") do call :work3 "%%~dg" "%%~pg" "%%~ng" "%%~xg"
goto :EOF





:work3
rem:work3

set "zz1drive=%~1"
set "zz2path=%~2"
set "zz3file=%~3"
set "zz4ext=%~4"


set "zzsource=%zz1fullfn%"
set "zzdestpath=%zzhold%%zz2path%"
set "zzdestfullfn=%zzdestpath%%zz3file%%zz4ext%"
set "zzxcopydest=%zzdestpath%"

if exist "%zzdestfullfn%" goto :work3fixf

goto :work3copy





:work3copy
rem:work3copy

if %zzlive% EQU 0 goto :work3show

xcopy /h /i /f "%zzsource%" "%zzdestpath%"
@echo.
goto :EOF





:work3show
rem:work3show

xcopy /h /i /f /l "%zzsource%" "%zzdestpath%"|find /i "%zzsource%"
@echo.
goto :EOF





:work3fixf
rem:work3fixf

set zzindex=0





:work3loop
rem:work3loop

set /A zzindex=zzindex+1
set "zzdestfullfn=%zzdestpath%%zz3file%-%zzindex%%zz4ext%"
if not exist "%zzdestfullfn%" goto :work3rencopy

rem if you want to set a "Maximum" for number of dups to check, test "%zzindex%" here

goto :work3loop





:work3rencopy
rem:work3rencopy

if %zzlive% EQU 0 goto :work3renshow

md "%zzdestpath%">nul 2>&1
copy /y nul "%zzdestfullfn%">nul 2>&1
xcopy /h /i /f /y "%zzsource%" "%zzdestfullfn%"
@echo.

goto :EOF





:work3renshow
rem:work3renshow

echo xcopy /h /i /f /y %zzsource% -^> %zzdestfullfn% (ren)
@echo.

goto :EOF





:cleanup
rem:cleanup

subst %zzsubst% /d>nul 2>&1

set "zz1drive="
set "zz1fullfn="
set "zz1t="
set "zz2path="
set "zz3file="
set "zz4ext="
set "zzdestfullfn="
set "zzdestpath="
set "zzftype="
set "zzhold="
set "zzindex="
set "zzlive="
set "zzsource="
set "zzstart="
set "zzsubst="
set "zztarget="
set "zzxcopydest="

goto :EOF





rem     mkdir d:\test
rem     mkdir f:\test1
rem     chcp 65001
rem     XCOPY C:*.pdf D:test /S /H
rem     XCOPY F:*.pdf D:test /S /H
rem     XCOPY D:*.pdf F:test1 /S /H
rem     copy f:\test1 d:\test\kra\
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.