2017-01-17 5 views
0

Мне часто приходится отслеживать файлы на работе, вытягивая сотню из списка из тысячи, поэтому я создал командный файл, который скопировал бы файлы в том месте, где перечислены в каталоге csv в каталоге пакетных файлов, а затем вставляют их в папку на моем рабочем столе.Пакетный файл для копирования списка файлов, включая подкаталоги

Это сработало, но мне часто приходится делать это для сотен файлов по десяткам или около того каталогов, поэтому я попытался изменить его, чтобы включить подкаталоги. У меня проблема с работой, и мне было интересно, могут ли отличные люди в StackOverflow. Благодаря!

@echo on 
set theDest="%USERPROFILE%\Desktop\Batch Copies %date:/=%" 
set /p MY_TEXT=<FileList.csv 
echo.%MY_TEXT% 
set MY_TEXT=%MY_TEXT:"",""=,% 
echo.%MY_TEXT% 
if not exist %theDest% md %theDest% 
pause 
for /R %MY_TEXT% %%G IN (.) do (
for /F "skip=1 delims=" %%f in (FileList.csv) do (
    if exist "%MY_TEXT%\%%f.*" (
     copy "%MY_TEXT%\%%f.*" %theDest% 
     ) else (
    if exist "%MY_TEXT%\%%f" (
     copy /R "%MY_TEXT%\%%f" %theDest% 
     ) else echo "%MY_TEXT%\%%f" does not exist && echo   0 file^(s^) copied. && echo  ERROR: %%f not found && echo. && pause) 



) 
) 
echo. && echo. && echo Process Completed. &&echo. 
pause 

Часть проблемы я просто получаю в партию, когда я писал, а затем покинула его, и я пытаюсь вернуться и выяснить, как все работает, так что я, вероятно, испортил его больше возможностей, чем один ,

ответ

0

Таким образом, цикл FOR имеет параметр/R, который будет запускать ту же самую команду во всех подкаталогах.

В вашем случае, я думаю, что вы хотите:

for /R %%a in (.) do call :MyCopyFunction %%a 
exit /B 

:MyCopyFunction [%1 is the current directory] 
    echo My Current directory is %1 
    [Do All your code here, using %1 as the current directory] 
exit /B 

Я не понимаю, что ваш скрипт делает в деталях, так что вы все равно должны заполнить в деталях.

Но это показывает вам, как пройти всю структуру каталогов.

+0

Таким образом, для/Р% MY_TEXT% %% G В делают называть MyCopyFunction (.): MyCopyFunction для/F "пропустить = 1 delims =" %% п в (FileList.csv) делают \t, если существует «%% е. *»( \t \t копия "%% е. *" % theDest% \t \t) еще ( \t, если существует "%% F"( \t \t копия "%% F" % theDest% \t \t) – hype124

+0

Извините, мне не удалось заставить его работать. Является ли это ссылкой на переменную f без объявления ее в текущем каталоге? – hype124

+0

Вы писали: 'for/R% MY_TEXT% %% G'. Я не знаю, почему '% MY_TEXT%' находится в середине цикла ?? – abelenky

Смежные вопросы