Пакетный процесс DOS для перемещения файлов в соответствующие папки - PullRequest
2 голосов
/ 08 августа 2009

Я хочу написать пакетный процесс DOS, который пройдет через мой каталог и переместит все файлы * .txt в папку dest, начиная с первого символа файлов txt

Ex.
abc.txt переместится в папку "a"
def.txt переместится в папку "d"
и так далее ...

Ответы [ 6 ]

4 голосов
/ 08 августа 2009

Из командной строки:

for %i in (*.txt) do (set FOLDER=%i & move %i %FOLDER:~0,1%)

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

for %%i in (*.txt) do (set FOLDER=%%i & move %%i %FOLDER:~0,1%)
0 голосов
/ 03 декабря 2012

Подсчитать все файлы TSV в текущей папке.

for /f "delims=|" %%f in ('dir *.tsv /b') do (
echo %%~nf
findstr /R /N "^" %%f | find /C ":"
)
0 голосов
/ 22 сентября 2011

Как насчет этой строки:

общая форма: для% a in (a b c d e f g h i j klm n o p q r s t u v w x y z) делать, если не существует% a \ nulmd% a & если существует% a * move% a *% a

этот мод будет делать только текстовые файлы (согласно ОП): ... если существует% a * .txt move% a * .txt% a

или можно улучшить это в летучей мыши, чтобы сделать «... если существует %% a *% 1 move %% a *% 1 %% a», чтобы разрешить сопоставление расширений в командной строке; что, вероятно, потребует точку в% 1 (не хочется тестировать это прямо сейчас. Если бы это было проблемой, у вас всегда мог быть if% 1! ==!, чтобы выбрать между общей формой и% 1-специфичным с уже предоставленной точкой.

конечно,% a для командной строки и для летучей мыши, удвойте% s как обычно (% a -> %% a).

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

и теперь у меня заняло больше времени набрать это, чем набрать оригинальную строку выше ...: -)

0 голосов
/ 26 августа 2009

Вы можете использовать команду битерскриптинга chex (извлечение символов) , чтобы извлечь первый символ имени файла. Вот сценарий. Предположим, ваши файлы находятся в C: \ My Directory.

# Script move1.txt
# Change directory to My Directory.
cd "C:\My Directory"

# Collect a list of *.txt files.
var str list ; lf -n "*.txt" > $list

# Go thru files one by one.
while ($list <> "")
do

    # Get the next file.
    var str file ; lex "1" $list > $file

    # $file now has full path of a found *.txt file. Get just the file name.
    var str filename ; stex -p "^/^l[" $file > $filename

    # $filename has just the file name. Get the first character.
    var str firstchar ; chex -p "1" $filename > $firstchar

    # $firstchar now has the first char of file name. The folder where we
    # want to move this file is, then, C:\Destimation Folder\$firstchar .
    var str destfolder ; set $destfolder = "C:\Destination Folder\"+$firstchar

    # Move $file to $destfolder.
    system move ("\""+$file+"\"") ("\""+$destfolder+"\"")

done

Скрипт в битрейскрипте (http://www.biterscripting.com). Чтобы попробовать, сохраните сценарий как C: \ Scripts \ move1.txt, запустите битерскрипт, введите следующую команду.

script move1.txt

Если вам нужно периодически запускать сценарий, запланируйте следующую команду в планировщике задач.

"C:\biterScripting\biterScripting.exe" "move1.txt"

Я не тестировал скрипт, протестируйте его на примерах файлов. Убедитесь, что вы изменили "C: \ My Directory" и "C: \ Destination Folder" на их правильные значения. Всегда используйте двойные кавычки с именами файлов и путями.

0 голосов
/ 08 августа 2009

Я думаю, что проблема в том, чтобы извлечь первую букву.

Вы можете использовать символ ~ для извлечения первой буквы имени файла

set str=filename
echo %str:~0,1%
f
0 голосов
/ 08 августа 2009
copy sourcepath\a*.txt destinationpath\a

copy sourcepath \ b * .txt destinationpath \ b

...