search.bat:
@echo off & setlocal
for /r "%~dp0" %%a in (*.txt) do call env.bat "%%~nxa"
env.bat:
@echo off & setlocal
set "filename=%~1"
echo %filename%
search.bat будет искать каталог, в котором сценарий живет рекурсивно для * .txt. Для каждого совпадения env.bat вызывается с аргументом filename.txt (без полного пути. Если вы хотите полный путь, измените "%%~nxa"
на "%%~fa"
. См. help for
в окне консоли для получения дополнительной информации.) Env.bat then перекликается с измененной переменной.
Подобно тому, как академическое упражнение, это также можно пройти «filename.txt» с помощью стандартного ввода, а не в качестве аргумента сценария.
search.bat:
@echo off & setlocal
for /r "%~dp0" %%a in (*.txt) do (@echo %%~nxa|env.bat)
env.bat
@echo off & setlocal
set /P "filename="
echo %filename%
Для Eric J., вот те же сценарии, написанные в PowerShell. Первый метод аргумент:
search.ps1
set-executionpolicy remotesigned
gci -recurse -filter *.txt | %{ .\env.ps1 $_.Name }
env.ps1
set-executionpolicy remotesigned
param (
[string]$filename
)
$filename
И следующий метод STDIN.
search.ps1
set-executionpolicy remotesigned
gci -recurse -filter *.txt | %{ $_.Name | .\env.ps1 }
env.ps1
set-executionpolicy remotesigned
[string]$filename = $input
$filename
Это, кажется, работает, в чем вопрос? – SomethingDark
Почему вы перенаправляете вывод в текстовый файл. Просто используйте команду CALL для запуска файла 'env.bat' и передайте переменную' FOR' '%% a' в качестве аргумента командной строки в пакетный файл. – Squashman
Я хочу использовать имя в файле filelist.txt как переменную имени файла. этот файл также дает мне весь путь к файлу, и мне нужен файл filename.txt – Georgep2000