Читать имя файла в пакетном программировании Windows - PullRequest
2 голосов
/ 12 июля 2011

Я хочу прочитать имя файла в пакетном программировании Windows. Я пытаюсь использовать разные методы, но не удалось, пожалуйста, помогите.

Сценарий приведен ниже.

У меня есть разные файлы в папке, но длина имени файла одинакова для всех файлов. Э.Г.

1000342578_30062011.PDF
1000342329_30062011.PDF

И я просто хочу сохранить деталь после _ и до .PDF (например, 30062011) детали в переменной.

Ниже приведены только попытки, но я не могу пройти.

@echo off
echo.Date   : %date%
echo.Year   : %date:~10,4%
dir /s /b C:\Users\zeeshando\Desktop\*.txt
for %%x in (c:\temp\*.xls) do echo %%x 
lfnfor off 
for %%x in (*.*) do echo %%x > filelist.txt 
PAUSE
for %i in (C:\Users\zeeshando\Desktop) do 
    echo %~ni
PAUSE

UPDATE

Мой текущий код, основанный на ответе @Alex K.:

@setlocal enabledelayedexpansion
for %%x in (C:\Hi\*.*) do (
    set fn=%%x
    set fn=!fn:~22,8!
    echo !fn!
    call:handler
)
goto:eof

:handler
echo !fn!
copy C:\Hi\*.* E:\!fn!
goto:eof


PAUSE

Но это не копирование файлов. Пожалуйста, проверьте вышеуказанный код.

Ответы [ 3 ]

2 голосов
/ 12 июля 2011

Вы можете сделать это в цикле for, используя _ и. в качестве разделителей, вот так:

FOR /F "tokens=2 delims=_." %%i IN ('DIR /b C:\Users\zeeshando\Desktop\*_*.*') DO ECHO %%i
1 голос
/ 13 июля 2011
@ECHO OFF
SET "destpath=<i>destinationPath</i>"
FOR %%f IN (<i>sourcePath</i>\*.*) DO CALL :process "%%f"
GOTO :EOF

:process
SET srcfile=%1
SET "name=%~n1"
SET "name=%name:*_=%"
COPY %srcfile% "%destpath%\%name%"

Строка SET "name=%~n1" извлекает из полного пути только имя без расширения.

Строка SET "name=%name:*_=%" удаляет символ _ и все перед ним в значении nameи сохраняет результат обратно в name.

В конечном итоге, перед выполнением команды COPY, name содержит только ту часть исходного имени файла, которая находится между _ и расширением.

0 голосов
/ 12 июля 2011

Поскольку они имеют фиксированную длину, вы можете использовать синтаксис :~startpos,len;

set fn=1000342578_30062011.PDF
set fn=%fn:~11,8%
echo %fn%

>30062011

В цикле for;

setlocal enabledelayedexpansion
for %%x in (*.*) do (
    set fn=%%x
    set fn=!fn:~11,8!
    call:handler
)
goto:eof

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