записывать файлы по относительному пути в пакетном скрипте DOS - PullRequest
1 голос
/ 21 марта 2011

Ссылаясь на Каков наилучший способ сделать подстроку в командном файле? Я думаю, что ниже должно работать.

FOR %%f IN (*.wav) DO CALL :runthis "%%f"
rem del temp.wav tmpfile
GOTO :EOF

:runthis
set "outdir=%~p1\output\"
copy "%~1" "%outdir%%~1"

Последняя команда должна dosomthing ко всем файлам .wav в текущем каталоге и вывод в существующий подкаталог " output " с сохранением исходного имени файла.Любая идея, где я иду не так?

Update1: Спасибо, исправил синтаксис.Я не заметил, что% pI расширяет I только до пути, не читал внимательно.Теперь неправильно то, что он расширен с помощью "s

dosomething "11.wav" "\Users\t4\Desktop\Airlines\WavRepeaters\\outdir\"11.wav""

. Это должно быть что-то вроде: *

dosomething "11.wav" c:\Users\t4\Desktop\Airlines\WavRepeaters\outdir\11.wav

Update2: % ~ dp1 - раскрывает%1 только к букве диска и пути, без кавычек!

1 Ответ

1 голос
/ 21 марта 2011

Основная проблема, похоже, заключается в использовании параметров.

В : runthis вы используете %~pI, но нет никаких %I.
Еще одна ловушка - пробелы в именах файлов, тогда что-то нужно заключать в кавычки вокруг имени файла/ путь.

С некоторыми изменениями он должен работать

@echo off
FOR %%f IN (*.bat) DO CALL :runthis "%%~f"
rem del temp.wav tmpfile
GOTO :EOF

:runthis
set "outdir=%~p1\output\"
echo dosomthing "%~1" "%outdir%%~1"
goto :eof
...