Pregunta

En Nant, me gustaría poder extraer el apellido del directorio en una ruta.
Por ejemplo, tenemos la ruta 'c: \ my_proj \ source \ test.my_dll \'

Me gustaría pasar por ese camino y extraer 'test.my_dll'

¿Hay alguna manera de hacer esto fácilmente?

¿Fue útil?

Solución

Consulte la tarea script . Puede escribir código personalizado en C # o lo que sea, y devolver un valor que puede asignar a una propiedad.

Otros consejos

Puede hacerlo con las funciones de cadena NAnt existentes. Solo un poco feo ...

${string::substring(path, string::last-index-of(path, '\') + 1, string::get-length(path) - string::last-index-of(path, '\') - 1)}

Es posible encontrar el directorio principal de su ruta y luego usar el reemplazo de cadena para encontrar la carpeta que está buscando:

<property name="some.dir" value="c:\my_proj\source\test.my_dll" />
<property name="some.dir.parent" value="${directory::get-parent-directory(some.dir)}" />
<property name="directory" value="${string::replace(some.dir, some.dir.parent + '\', '') }" />

Es posible que desee probar la nueva función agregada a nant 0.93 (aún en las versiones nocturnas) -

directory::get-name(path)

Esto devolvería el nombre del directorio mencionado en la ruta .

Consulte ayuda ingenua

No. Tendrá que escribir una tarea personalizada para algo así.

Ampliando Steve K:

<script language="C#" prefix="path" >
    <code>
        <![CDATA[
          [Function("get-dir-name")]
          public static string GetDirName(string path) {
              return System.IO.Path.GetFileName(path);
          }
        ]]>
    </code>
 </script>

<target name="build">
    <foreach item="Folder" in="." property="path">
        <echo message="${path::get-dir-name(path)}" />
    </foreach>
</target>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top