2016-08-31 2 views
2

Привет, У меня нет большого опыта в пакетном программировании и проблема. У меня есть сценарий .bat, который читает файл со списком путей, и я хочу получить имя файла этих путей. Я использую скрипт в cygwin. Мой код в скрипте:Batch get filename from path

for /F %%a in (error1.txt) do (
    set value=%%a 
    FOR /F %%I IN ("%value%") DO SET MYPATHFILE=%%~nxI 
) 

Когда я запустить скрипт %value% пуст.
Значение error1.txt:

a/b/c/d/TextIWant 

ответ

4

вам необходимо замедленное расширение или вы можете напрямую использовать %% а:

for /F %%a in (error1.txt) do (
    FOR /F %%I IN ("%%a") DO SET MYPATHFILE=%%~nxI 
) 

или

setlocal enableDelayedExpansion 
for /F %%a in (error1.txt) do (
    set value=%%a 
    FOR /F %%I IN ("!value!") DO SET MYPATHFILE=%%~nxI 
) 
+0

спасибо :) это сработало – HamstersBlue

+0

Как я могу удалить последний символ из MYPATHFILE? – HamstersBlue

+0

'set" MYPATHFILE =% MYPATHFILE: ~ 0, -1% ', но вам нужно сделать это за пределами цикла for. – npocmaka

4

Похоже, вам нужно Delayed Расширение.

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

Добавить setlocal EnableDelayedExpansion в свой код в верхней и изменить %value% к !value!

Вы можете проверить эту проблему самостоятельно с этим кодом:

@echo off 
setlocal EnableDelayedExpansion 
set foo=bar 
For /L %%a (1,2,1) do (
set foo=foobar 
echo.old value %foo% 
echo.new value !foo! 
) 

Я надеюсь, что это помогло :)

приветствий

geisterfurz007

+0

спасибо, это тоже работает :) – HamstersBlue

 Смежные вопросы

  • Нет связанных вопросов^_^