2016-02-08 1 views
1

Моя проблема в том, что я хотел бы искать папку с подстановочным знаком и затем печатать имя файла в другом пакетном файле. Например: c: \ docs \ hello.txt (я хочу просмотреть эту папку с критериями поиска * .txt, а затем передать этот «hello.txt» на мой env.bat с установленным именем файла =с использованием пакета для поиска файлов с подстановочным знаком и печати имени в другом файле

Пока что я может получить имя файла, как показано ниже:

echo off 
cd %1 
if exist filelist.txt del filelist.txt 
for /r %%a in (*.txt) do echo %%a > filelist.txt 
+0

Это, кажется, работает, в чем вопрос? – SomethingDark

+0

Почему вы перенаправляете вывод в текстовый файл. Просто используйте команду CALL для запуска файла 'env.bat' и передайте переменную' FOR' '%% a' в качестве аргумента командной строки в пакетный файл. – Squashman

+0

Я хочу использовать имя в файле filelist.txt как переменную имени файла. этот файл также дает мне весь путь к файлу, и мне нужен файл filename.txt – Georgep2000

ответ

1

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