Как установить переменную в пакетном файле - PullRequest
1 голос
/ 26 ноября 2011

Я хочу переместить файлы в соответствии с именами папок.

1. Некоторые имена папок были записаны в b2.txt.В моем b2.txt каждая строка содержит одно, два или три слова, связанные пробелом или "-".Например:

transfer print
anti-foamer
insect
fibre reinforced plastic

2.Мои файлы находятся в "E: \ JP-XIN \".

3.На диске E должно существовать одно (только одно) имя папкисостоящий из одной строки в b2.txt.

Мой вопрос заключается в том, как задать каждую строку в b2.txt точно как переменную.

В следующем коде "%% k" является файломимя, полученное при поиске, "%% l" - это путь к папке, полученной при поиске.Код не работал правильно.

@echo off
setlocal ENABLEDELAYEDEXPANSION
for /f "delims=" %%a in (b2.txt) do (
    set VAR=%%a
    for /f "delims=" %%k in ('dir /s/b/a-d E:\JP-XIN\*.pdf E:\JP-XIN\*.txt  ^| findstr /i /c:"!VAR!"') do (
        for /f "delims=" %%l in ('dir /s/b/a:d-h E:\ ^| findstr /i /c:"!VAR!"') do (
            if not "%%l"=="" move "%%k" "%%~fsl"
)))
pause

Ответы [ 2 ]

1 голос
/ 29 ноября 2011

У меня было время потратить, поэтому я работал сверхурочно, чтобы решить, как мне кажется, ваша проблема.

Если ваши требования следующие:

  1. Файл b2.txt содержит несколько имен папок с возможными пробелами.
  2. В E: \ есть одна папка, которая содержится в b2.txt.
  3. В E: \ JP-XIN \ есть несколько файлов * .pdf и * .txt.

и вы хотите:

  1. Найдите папку, которая содержится в b2.txt, и
  2. Переместите к нему файлы * .pdf и * .txt с одинаковым именем папки

тогда пакетный файл ниже решит вашу проблему:

@echo off
for /f "delims=" %%a in (b2.txt) do (
    if exist "E:\%%a" (
        move "E:\JP-XIN\%%a.pdf" "E:\%%a"
        move "E:\JP-XIN\%%a.txt" "E:\%%a"
    )
)

Если файлы с именами .pdf и .txt являются единственными, тогда две команды move могут быть объединены в одну:

        move "E:\JP-XIN\%%a.*" "E:\%%a"

Если это не ваша проблема, пожалуйста, скажите нам, в чем ваша проблема!

0 голосов
/ 28 ноября 2011

Вам нужно использовать tokens=*, чтобы вернуть всю строку как одну переменную.

for /f "tokens=* delims=" %%a in (b2.txt) do (

Вы также можете написать что-то вроде tokens=1,2*, которое превращает первую переменную в токен 1, вторую переменную в токен 2 и третью переменную в остальную часть строки. Итак, текст:

Several words on a line.

будет разделен на:

%%a = Several
%%b = words
%%c = on a line.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...