Перебирайте имена файлов в пакетном скрипте - PullRequest
3 голосов
/ 12 января 2011

Я бы хотел пакетный скрипт для всех текстовых документов в папке. Вот что мне удалось до сих пор:

@ECHO off
title Test
set dir1=C:\Users\Family\Desktop\Example

:Start
cls
echo 1. test loop
echo 2. Quit
set /p choice=I choose (1,2):
if %choice%==1 goto test
if %choice%==2 exit

:test
cls
echo running loop test 
FOR %%n in (%dir1% *.txt) DO echo %dir1%\%%n
echo Done
pause

Я хотел бы вывести:

running loop test
C:\Users\Family\Desktop\Example\doc 1.txt
C:\Users\Family\Desktop\Example\doc 2.txt
Done

Но я получаю это:

running loop test
C:\Users\Family\Desktop\Example\C:\Users\Family\Desktop\Example
C:\Users\Family\Desktop\Example\doc 1.txt
C:\Users\Family\Desktop\Example\doc 2.txt
Done

1 Ответ

11 голосов
/ 12 января 2011

Основная проблема, кажется, в промежутке между (% dir1% * .txt)

Это может быть

@ECHO off
title Test
set "dir1=C:\Users\Family\Desktop\Example"

:Start
cls
echo 1. test loop
echo 2. Quit
set /p choice=I choose (1,2):
if %choice%==1 goto test
if %choice%==2 exit

:test
cls
echo running loop test 
FOR %%X in ("%dir1%\*.txt") DO echo %%~dpnX
echo Done
pause

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

EDIT:
%%~dpnX предназначен для расширения имени файла %%X до
d = диск (C:)
p = путь (\ Users \ Family \ Desktop \ Пример)
n = имя файла (test1) (без расширения)

f = полное имя файла (C: \ Users \ Family \ Desktop \ Example \ test1.txt).

Возможные модификаторы описаны здесь FOR /?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...