копирование списка файлов, разделенных точкой с запятой, из txt-файла в заданную папку в Windows cmd

#windows #command-line #windows-scripting

#Windows #командная строка #windows-скриптинг

Вопрос:

у меня есть текстовый файл, который содержит, например:

 c:testtest1.txt;d:test2j.js;d:test22.cs
  

Мне нужно скопировать те файлы, которые разделены с помощью bat-файла командной строки Windows, в заданную папку, которая передается в bat-файл. Как я могу этого добиться?

Ответ №1:

На самом деле очень просто:

 for /f %%l in (somefile.txt) do (
    for %%f in (%%l) do (
        copy "%%f" %1
    )
)
  

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

Если пункты назначения копирования тоже выглядят подобным образом, просто добавьте еще два цикла, очевидно:

 for /f %%l in (somefile.txt) do (
    for %%f in (%%l) do (
        for /f %%k in (destination.txt) do (
            for %%g in (%%k) do (
                copy "%%f" %%g
            )
        )
    )
)
  

Комментарии:

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

2. @Joey когда я запускаю ————— для /f %%l в (d:BuildServerBuildScriptssourceFilelist.csv ) выполнить (для %%f в (%%l) выполнить (для %%k в (d:BuildServerBuildScriptsDestinationlist.csv ) выполните (для %%g в (%%k) выполните ( скопируйте «%%f» %%g ) ) ) ) ————- Файл Destinationlist.csv заменен списком исходных файлов и, наконец, его содержимое заменено последним файлом из списка исходных файлов, а вывод cmd выводит % g и% k как символы самостоятельно, т. Е. не со значениями, присвоенными им, не сработало, как я ожидал

3. @DSharper, задайте, пожалуйста, другой вопрос.

4. Просто измените for %%k на for /f %%k

5. Ах, спасибо, мусио. Я должен признать, что не пытался понять, что рвота кода хотела сказать мне в комментарии DSharper.

Ответ №2:

Вы можете скопировать файлы из списка файлов с помощью следующей команды для пакетного файла:

 for /f "usebackq delims=;" %%f in (filelist.txt) do copy %%f %1
  

Предполагая filelist.txt содержит имя каждого файла в отдельной строке:

 c:testtest1.txt;
d:test2j.js;
d:test22.cs
  

Хотя понятия не имею, как разобрать одну строку.