2011-01-11 3 views
3

Мне нужен пакетный скрипт для всех текстовых документов в папке. Это то, что мне удалось до сих пор:Процитировать имена файлов в Batch Script

@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 

ответ

11

Основная проблема, кажется, (% 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 

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

РЕДАКТИРОВАТЬ:
%%~dpnX для расширения имя файла %%X к
d = диск (С :)
p = путь (\ Users \ Семейный \ Рабочий стол \ Пример)
n = имя_файла (test1) (без расширения)

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

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

+0

Спасибо, что сработало отлично. Не могли бы вы объяснить мне %% ~ dpfX? – Krayons

+3

'%% ~ nX' просто имя файла (test1), имя файла с расширением -' %% ~ nxX' (test1.txt). – hlcs

+1

Чтобы уточнить: обратите внимание, что в его коде '%% X' указано все имя файла, которое было найдено. Остальные фрагменты '~ dpn' являются модификаторами' %% X'. Так как пользователь 2 сказал, используйте модификатор '~ n' для переменной, чтобы вывести только файл, вызывая' echo %% ~ nX' –